java에서 null이 있는 형식 캐스팅 중 예외가 없습니다.
String x = (String) null;
왜 이 성명에는 예외가 없는가?
String x = null;
System.out.println(x);
null
.toString()
늘
은 할 수 있어요.null
예외 없이 모든 참조 유형으로 이동합니다.
println
메서드는 먼저 개체가 null인지 여부를 확인하기 때문에 null 포인터를 던지지 않습니다. null을 만 하면 ."null"
를호 the the the the the the the라고 합니다.toString
메서드를 지정합니다.
상세 추가:내부적으로 인쇄 메서드 호출String.valueOf(object)
메서드를 지정합니다. ★★★★★★★★★★★★★★★.valueOf
늘의 예외를 데 도움이 됩니다.이 는, 「null」의 「null」의 「null」의 「null」의 「null」의 「null」의 「null」의 「null」의 「null」의 「null」의 「null」의 예외에 도움이 됩니다
return (obj == null) ? "null" : obj.toString();
나머지 혼란은 늘 객체의 메서드를 호출하면 특별한 경우가 아니라면 늘 포인터 예외가 발생합니다.
은 할 수 있어요.null
모든 참조 유형에 적용됩니다., 이 때, 이 때 사용하는 도 있습니다.null
인수로 할 수 있습니다.System.out.println(Object)
이 경우에는 '아, 아, 아, 아, 이 경우 할 수 .null
값을 지정하고 메서드를 호출합니다.
할 수 있는 처럼 보이는 이 있습니다.null
★★★★★★ 。
Thread t = null;
t.yield(); // Calls static method Thread.yield() so this runs fine.
이치노은 할 수 있어요.null
모든 참조 유형에 적용됩니다.그렇지 않으면 기준 변수에 할당할 수 없습니다.
메서드가 오버로드된 경우 다음 구성에서는 null 값을 캐스팅해야 합니다.이러한 메서드에 null이 전달되면 컴파일러는 모호성을 해소하는 방법을 모르기 때문에 이 경우 null을 타이프캐스트해야 합니다.
class A {
public void foo(Long l) {
// do something with l
}
public void foo(String s) {
// do something with s
}
}
new A().foo((String)null);
new A().foo((Long)null);
그렇지 않으면 필요한 메서드를 호출할 수 없습니다.
Println(Object)
String.valueOf()
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Print(String)
을 사용하다
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
여기 많은 답변이 이미 언급되어 있습니다.
모든 참조 유형에 null을 캐스팅할 수 있습니다.
그리고.
인수가 null인 경우 "null"과 동일한 문자열
어디에 명시되어 있는지 궁금해서 Java Specification을 찾아봤습니다.
늘 참조는 항상 모든 참조 유형(55.2, 55.3, 55.5)에 할당하거나 캐스트할 수 있습니다.
참조가 null인 경우 문자열 "null"(4개의 ASCII 문자 n, u, l, l)로 변환됩니다.
다른 사람들이 쓴 것처럼, 당신은 모든 것을 무효로 할 수 있다.일반적으로, 이 기능은 필요 없습니다.이렇게 쓰면 됩니다.
String nullString = null;
거기에 깁스를 하지 않고요.
하지만 이러한 캐스팅이 말이 되는 경우가 있습니다.
a) 특정 메서드가 호출되었는지 확인하려면 다음과 같이 하십시오.
void foo(String bar) { ... }
void foo(Object bar) { ... }
만약 당신이 타이핑한다면 차이가 있을 것이다.
foo((String) null) vs. foo(null)
b) IDE를 사용하여 코드를 생성하려는 경우, 예를 들어 다음과 같은 유닛 테스트를 작성합니다.
@Test(expected=NullPointerException.class)
public testCtorWithNullWhatever() {
new MyClassUnderTest((Whatever) null);
}
TDD를 실행하고 있습니다.이것은 "MyClassUnderTest" 클래스가 아직 존재하지 않는 것을 의미합니다.이 코드를 적어두면 IDE를 사용하여 먼저 새로운 클래스를 생성하고 다음으로 "즉시 사용 가능한" 인수를 받아들이는 컨스트럭터를 생성할 수 있습니다.IDE는 테스트에서 컨스트럭터가 "무엇이든" 유형의 인수를 하나만 사용해야 한다는 것을 알 수 있습니다.
이 언어 기능은 이 상황에서 편리합니다.
public String getName() {
return (String) memberHashMap.get("Name");
}
memberHashMap.get("Name")이 null을 반환해도 위의 메서드는 예외 없이 null을 반환해야 합니다.클래스가 무엇이든 null은 null입니다.
인쇄:
개체를 인쇄합니다.String.valueOf(Object) 메서드로 생성된 문자열은 바이트로 변환됩니다.
가치:
인수가 null이면 "null"과 같은 문자열이 반환됩니다.그렇지 않으면 obj.toString() 값이 반환됩니다.
오브젝트가 다음과 같은 경우 단순히 값 "null"을 가진 문자열을 반환합니다.null
.
이것은 애매한 방법을 사용할 때 매우 편리합니다.예를 들어 JDialog에는 다음과 같은 시그니처를 가진 컨스트럭터가 있습니다.
JDialog(Frame, String, boolean, GraphicsConfiguration)
JDialog(Dialog, String, boolean, GraphicsConfiguration)
Graphics Configuration을 설정하고 싶은데 이 대화상자의 부모가 없기 때문에 이 컨스트럭터를 사용해야 합니다.첫 번째 인수는 null이어야 합니다.사용.
JDialog(null, String, boolean, Graphicsconfiguration)
는 애매하기 때문에, 이 경우는, null을 서포트되고 있는 타입의 어느 쪽인가에 캐스팅 하는 것으로써, 콜을 좁힐 수 있습니다.
JDialog((Frame) null, String, boolean, GraphicsConfiguration)
언급URL : https://stackoverflow.com/questions/18723596/no-exception-while-type-casting-with-a-null-in-java
'source' 카테고리의 다른 글
Vuex 모듈에서 작업을 디스패치하려고 해도 작동하지 않습니다.[vuex] 알 수 없는 작업 유형 (0) | 2022.08.17 |
---|---|
Java String에는 몇 글자를 사용할 수 있습니까? (0) | 2022.08.17 |
Maven 2 빌드 클래스 패스에 설치 없이 jars를 추가할 수 있습니까? (0) | 2022.08.17 |
스크립트 태그 vue2의 js 코드에서 사용자 지정 이벤트 듣기 (0) | 2022.08.17 |
비동기 HTTP 요구를 호출해야 하는 VueJ 라이프 사이클 훅은 무엇입니까? (0) | 2022.08.17 |