it-source

null은 객체입니까?

criticalcode 2022. 10. 30. 11:08
반응형

null은 객체입니까?

은 null입니까?Object★★★★★★★★★★★★★★★★★?

null의 합니다.java.lang.Object를 들면, 「」와 같이equals() 이는 이, 는되지지지 . . . . . . . a a a a a a a a . . . . a a a . . . .가 됩니다NULL(특수)NullPointerException.

Java Language Specification은 이 주제에 대해 다음과 같이 기술합니다.

또한 특별한 null 타입이 있습니다.식 null 타입에는 이름이 없습니다.null 타입에는 이름이 없기 때문에 null 타입의 변수를 선언하거나 null 타입으로 캐스트 할 수 없습니다.null 참조는 null 유형의 식에서 사용할 수 있는 유일한 값입니다.늘 참조는 항상 모든 참조 유형에 캐스팅할 수 있습니다.실제로 프로그래머는 null 타입을 무시하고 null이 어떤 참조 타입이든 될 수 있는 특별한 리터럴이라고 가정할 수 있습니다.

'null is special'로 요약할 수 있을 것 같아요.

자바 규격에 따르면null는 오브젝트 변수에 할당할 수 있는 유형입니다(댓글에 기재된 값으로서). 수는 는 사용할 수 리터럴을 사용해야 합니다.null이치노

안 돼 : ★★★★★★★★★★★★★★★★★★★★★:null instanceof Object거짓으로 속이다

JRL(및 기타)은 다음과 같이 썼다.

아니, 그렇지 않아...

어느 쪽을 보느냐에 따라 누가 더 믿느냐에 따라 달라지는 경우가 많습니다.

JLS에 따르면 그렇습니다.특히 질문을 다음과 같이 바꾸면,nullObject?" 상기의 Michael Borgwardt에 의해 인용된 JLS 4.1에 덧붙여, 이하를 참조해 주세요.

JLS 3.10.7」을 참조해 주세요.

늘 리터럴은 항상 늘 타입입니다.

및 JLS 4.10:

타입 T의 서브타입은 모두 타입 U이며, T는 슈퍼타입 U 및 늘타입입니다.

또는 JLS 4.10.2:

null 타입의 직접 슈퍼타입은 null 타입 이외의 모든 참조 타입입니다.

[나로 강조]

Eclipse 2019-09의 컴파일러에 따르면 그렇지 않습니다.

true.toString();  // Cannot invoke toString() on the primitive type boolean
null.toString();  // Cannot invoke toString() on the primitive type null

1 12.0.1에 javac 이유는 다음과 같습니다.

true.toString();  // error: boolean cannot be dereferenced
null.toString();  // error: <null> cannot be dereferenced

는 기기 imply 음음 、 음 、 음 、 음 、 brackets 、 brackets 、 brackets where 。null원시적인 타입이 아닌 다른 타입입니다.JLS 4.1에 따르면:

Java 프로그래밍 언어에는 원시 유형(...)과 참조 유형(...)의 두 가지 유형이 있습니다.

그게 아니라면 다른 쪽이야


Claudiu는 다음과 같이 썼다.

null은 좀 못생겼죠.

반대다.null 경우, 요?대신 참조 유형 변수의 기본값으로 무엇을 제안하시겠습니까?의의의 비???액세스 위반에 오신 것을 환영합니다. 더 나쁜 것은 포인터 지옥입니다!


요아힘 사우어는 다음과 같이 썼다.

null은 유형 및 값입니다.

null에는 실제로는 3개의 항목이 있습니다(JLS 3.10.7도 참조).

  1. (이름 없는) 늘타이프
  2. null 문자 그대로의
  3. null 참조 입니다.(일반적으로 늘값 또는 단순히 늘값으로 축약됩니다.)

(1) 상기 JLS 4.10.2에 따르면 늘타입은 인터페이스뿐만 아니라 클래스에도 복수의 상속을 사용합니다.어플리케이션 프로그래머에게는 불가능하다는 것을 모두 알고 있습니다.

(2) 리터럴은 다음과 같이 정의되는 변수로 간주할 수 있다.

JVM_global final null_type null = new null_type();

주의: JLS 3.9:

다양한 문자 시퀀스가 키워드로 잘못 간주될 수 있습니다.

  • null는 키워드가 아니라 늘 리터럴(null literal)입니다(null 3.10.7).

★★★에 null instanceof <any type>

JLS 4.10.2를 염두에 둔 경우('늘타입은 모든 타입의 서브타입')null instanceof <any type>true안 그래?언뜻 보면 그렇습니다만, JLS 15.20.2는 다음과 같은 답을 제시합니다.

[...] 결과instanceof 연산자RelationalExpression 이 [...]가 아닌 경우입니다.그렇지 않으면 이 됩니다.

[나로 강조]

(어플리케이션 프로그래머의 관점에서) 어떤 것이 더 타당한지 자문해 보십시오.

  • 여여를 false이 우리에게되어 있는 즉 을 나타냅니다.

  • ★★★★★★★★★★★★★★★★true따라서 표현식이 특별한 참조, 즉 null reference에 대해 평가된다는 것을 알려주고, 존재 여부도 알 수 없고 이름이 없는 특수한 null 타입의 null 타입은 우리에게 공개되지 않지만 null 리터럴을 통해 여러 상속을 포함한 모든 타입의 서브타입이며, 어쨌든 무시되어야 합니까?보다 실용적인 예도 생각해 보십시오.

       class Car implements Vehicle {  
       ...
       Vehicle car = null;
       ...
       boolean b = car instanceof Car;  // True? There's not even an instance
       ...                              // which could be of type Car.
    

그 결과 다음과 같은 결과가 초래됩니다.

?는 왜?instanceof에 대해 적절한 표현이 아니다null★★★★★★★★★★★★★★★★★★★?

'어느덧 하다'라고 해요.instanceofsameorsubtypeof즉, 인스턴스의 유형을 두 가지 유형이 아닌 유형과 비교합니다., 이제null"인스턴스가 없습니다"를 의미하며 인스턴스가 없는 경우 인스턴스 유형이 없습니다.하지 않는 은 필연적으로 이 있는 false.

또는 "더 많은" 실제 사례:

  • 사과(=참조형)의 실물 크기의 사진을 손에 들고 있고, 그 위에 「Big Apple」(=참조형명)이라고 써 있습니다.
  • 제 앞에 테이블(=)이 있습니다.
  • 테이블 위에 사과(=사과)가 있으면 코드(=참조)가 연결되어 있습니다.
  • 이 코드의 다른 한쪽 끝을 손에 쥐고 있습니다(=참조 변수).
  • 코드를 따라서 사과를 트레이스 해, 제 사진(=사진)과 비교합니다.
  • 사과가 같은 크기이거나 그림보다 크면 'Big Apple'이라고 표기되어 있습니다(=true).
  • 크기가 작으면 (=거짓)이 아닙니다.
  • 테이블에 사과가 없는 경우(=인스턴스 없음), 코드가 존재하지 않는 경우(=false)도 해당되지 않습니다(=false).이유:사과가 큰 사과는 없나요?아니야.


마이클이 요약한 것처럼 "무는 특별하다"는 것은 사실이다.

Null은 객체의 결여입니다.

아니, 그건 물건이 아니야.

아니요, 클래스의 인스턴스도 아니고 클래스의 인스턴스도 아니고 클래스의 인스턴스도 아닙니다.그것은 아무것도 아닌 것에 대한 언급이다.

편집: 사양을 읽지 않았기 때문에 위의 내용이 100% 정확하지는 않을 수 있습니다.

4.1 Java Language Specification의 유형의 종류 에서 설명한 바와 같이 null은 null reference(리터럴로 표시됨)라는 하나의 값을 가진 유형입니다.null

식 유형인 특수한 null 유형도 있습니다.null름이없없 없없없다다에는 이름이 typenull로 캐스트하는 합니다.null type.null null null 할 수 있는 입니다.늘 참조는 항상 모든 참조 유형에 캐스팅할 수 있습니다.이라고 가정할 수 .null는, 임의의 참조 타입의 특수한 리터럴에 지나지 않습니다.

(권장하지 않는) Null Object Pattern에 대해 읽어보실 수 있습니다.이 패턴에 대한 자세한 내용은 C2 Wiki 또는 Wikipedia를 참조하십시오.

아니요. 객체의 null 인스턴스는 항상 false를 반환하므로 객체가 아닙니다. 또한 클래스마다 null이 하나씩이 아닌 하나만 있습니다.

Java Spec에 따르면

또한 모든 참조 유형의 값으로 사용할 수 있는 특수한 null 리터럴도 있습니다.null은 원시 유형의 변수를 제외한 모든 변수에 할당할 수 있습니다.null 값으로는 존재 여부를 테스트하는 것 외에 할 수 있는 일이 거의 없습니다.따라서 프로그램에서 null은 일부 개체를 사용할 수 없음을 나타내는 마커로 자주 사용됩니다.

Java는 참조를 통해 객체를 처리합니다.null은 자바의 OO-ness를 OO레벨 이하로 떨어뜨리는 것입니다.아니요, 객체가 아니라 참조 값입니다.오브젝트 패러다임과는 무관하지만 오브젝트를 가능하게 하는 Java의 배관과는 관계가 있습니다.

은 null 입니까?java.lang.Object 없어요.

null은 객체입니까?"is"의 정의에 따라 달라집니다.

Object foo = null;
System.out.println(foo.toString()); 

번째 은 " " 입니다.null는 타입으로 할 수 .Object두 번째 '', '아니다', '아니다', '', '아니다Object으로 '이러다'라는 결과가 됩니다.java.lang.NullPointerException

없습니다.null오브젝트가 아닙니다.이며, 그은 어떤 않기 에 이 오브젝트는 .null기억 속에.

언급URL : https://stackoverflow.com/questions/1894149/is-null-an-object

반응형