2014-11-29 2 views
-1

두 멤버 변수가있는 Item 클래스를 만듭니다. namescore; 및 두 가지 방법 : getName()getScore(). 그런 다음 하나의 멤버 변수 인 table (배열은 Item)과 세 가지 방법 : printList(), addItem()Instantiation() (아래 문제 해결에 사용)이라는 또 다른 클래스 List을 만듭니다. 여기에서 문제가 발생합니다 : 이 아닌 경우 printItem()에서 을 List에 모두 인쇄하려고합니다. 내가 사용하고 있습니다 : 그것은 이미 인스턴스화 경우에도 좋아 보인다되지 않습니다개체 배열 작업 중 NullPointerException

if(list.table[i].getName().equals(null)) 

모든 항목의 namenullscore 나는 목록에 Item의를 추가하기 전에. "빈"요소가 아닌 요소가있을 때처럼 보입니다. 즉, 이름과 점수가 null이 아니며 위의 조건은 작동하지 않고 대신 java.lang.NullPointerException이 표시됩니다.

+0

항목이 'null'인지 또는 항목 이름이 'null'인지 확인 하시겠습니까? – Jesper

+0

NOTHING은 null입니다. – Yoda

+1

@Yoda : Java에서는'null == null'이'true'입니다. 또는 null 확인을 할 수 없습니다. – Makoto

답변

0

그때 당신이 그것에 대한 getName 호출 할 수 없습니다 (또는 NullPointerException이 얻을 것이다 :이 너무 자주 아무것도하기 전에 코드에서 우리가 보는 이유이다 null 참조 (거기에 객체가 없다는 의미)에서 메소드를 호출하려고 할 것이기 때문에). equals는 인스턴스 메소드이므로 null 일 수있는 것으로 호출하지 않으려는 것을 유의하십시오. 예 :

Item item = table[i]; 
if (item != null) { 
    System.out.println(item.getName()); 
} 

이 작동합니다.

item이 null이 아니고 getName이 null을 반환하면 여기에 NPE를 가져 오지 않으며 "null"이 표준 출력에 인쇄됩니다. (null name을 인쇄하지 않으려면 item.getName() == null을 확인할 수 있습니다.)

+0

당신이 옳다고 생각합니다. 코드를 확인하고 단계별로 실행하면 객체가 존재하지 않는 것으로 나타 났으므로 (콘솔에 표시되지 않음) getName() 메서드를 사용하면 오류가 발생합니다. –

+0

먼저 객체가 존재하는지 여부를 확인한 다음 존재하는 경우 이름이 null인지 확인하십시오. –

2

equals()으로 설정하십시오. 그냥 == 이렇게 :

if(list.table[i].getName() == null) 

null 개체에 대해 작업을 수행 할 수 없습니다. 테이블의 i 번째 항목이 null의 경우

if (object != null) { 
object.doSomething(); 
} 
+0

코드를 다시 확인하고 단계별로 실행합니다. 흥미로운 점은 목록의 요소에 대해 : list.table [i], Item의 모든 매개 변수를 설정하여 이미 인스턴스화 한 경우에도 Item의 매개 변수 값을 조작하거나 변경하지 않아도 , 항목은 여전히 ​​존재하지 않습니다. 이 이유는 if (list.table [i] .getName() == null)가 실패한 이유입니다. 객체가 존재하지 않습니다! 이해할 수 없다. 이미 테이블의 항목을 인스턴스화했기 때문이다. –