2012-12-22 4 views
-2

다음 코드는 베이츠와 시에라에서입니다 :이 참조는 왜 null입니까?

public class Book { 
    private String title; // instance reference variable 

    public String getTitle() { 
     return title; 
    } 

    public static void main(String [] args) { 
     Book b = new Book(); 
     String s = b.getTitle(); // Compiles and runs 
     String t = s.toLowerCase(); // Runtime Exception! 
    } 
} 

String t = s.toLowerCase() 원인 런타임 예외 String s = b.getTitle()하지 않는 않는 이유는 무엇입니까?

+0

후 오류 로그를도. –

+0

와우, 5 분 안에 5 개의 답변 .. – micha

답변

2

널 참조가의 NPE가 발생합니다 필요한만큼 여러 번에 전달 될 수 실제로 기준으로 뭔가를 할 때. NPE를 방지하기 위해, 문자열이있다, 책 개체가 nulldefault value으로 얻을 자바

+0

"참고로 실제로 뭔가하고 싶을 때만"이제 알 겠어! 오류가 발생하는 경우 무언가를하고 싶지 않으면 null이 될 수 있습니다. 정말 고마워! – user1828538

+0

괜찮습니다! 또한, 당신은 여기에 많은 답변을 가지고 있습니다, 당신은 하나를 받아 들여야합니다. –

+0

어떻게 수락하나요? – user1828538

2

제목에 절대 값이 주어지지 않기 때문에. title과 같이 기본이 아닌 인스턴스 필드의 기본값은 null입니다. 따라서 b.getTitle()이라고 말하면 null을 반환합니다. 그런 다음 snull이고 null을 참조 해제하려고하면 . 연산자를 사용하면 NullPointerException이 발생합니다. 시도 :

Book b = new Book(); // b is now a Book object with a null title 
b.title = "Programming Java"; // b's title is now a String instead of null 
String s = b.getTitle(); // s is now the title that we added to the book 
String t = s.toLowerCase(); // t is now the same title in lower case 
1

new Book()가 null의 제목 private String title;을 가진 책 인스턴스를 만들 것입니다.

당신이 String t = s.toLowerCase();의 시도

가 null 따라서 결과

0

객체을 만들 때

private String title = ""; // instance reference variable 

그 방법과 같이, 당신의 title var에 null을하지 않습니다 할 object 따라서 초기화되지 않으면 null이됩니다. 문자열의 = b.getTitle은()하지 않는 경우

왜 문자열 t = s.toLowerCase는() 런타임 예외가 발생합니까? 당신이 null 인들에 toLowerCase()을 (호출 할 때 따라서 당신이 NPE를 얻을

음, b 따라서 초기화가 던져 NPE 그러나 b.getTitle()titlenull가 초기화되지 반환의 방법을 호출하지 않을 때).

String s = b.getTitle(); ---> s=null; 
String t= s.toLowerCase(); ---> t= null.toLowerCase(); 
Throws NPE; 
3

쉽습니다. Book에 대한 b 참조가 null이 아니지만 title에 값을 할당하지 않았습니다. 그것은 null입니다.

0

b은 유효한 초기화 된 Book 개체입니다. 그러나 제목은 정의되지 않습니다. 따라서 b.getTitle()null을 반환합니다. s.toLowerCase()을 사용하면 NullPointerException을 발생시키는 null에서 메서드를 실행하려고합니다.

당신은 제목을 디폴트 값을 제공하여 이러한 문제를 방지 할 수 있습니다

private String title = "default title..";