Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

當r等於null時,會發生什麼事?

What is wrong with this test to see whether r is null?

Rectangle r;

...

if (r.equals(null))

r = new Rectangle(5,10,20,30);

這是啥麼意思?

Update:

你們都好懂喔!都回答的頭頭是道,我是java初學,因為讀的是數位有關,從來沒接觸過、也沒人可問,學起來很吃力,如果可以,能留個即時通嗎?我想好好學它!

6 Answers

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    在Java, C, 和C++裡, NULL或null表示不存在的意思.

    所以在Java裡如果r==null表示r不存在. 如果r不存在那哪有可能用r裡的成員函式呢? 也就是說如果你有一個不存在的車, 你能開嗎?

    所以如果r==null, 那當Java執行到if (r.equals(null))時, Java就會顯示java.lang.NullPointerException的錯誤. 因r不存在. 但如果r!=null, 那就表示r = new Rectangle(5,10,20,30);不會被執行. 所以Java會跳過r = new Rectangle(5,10,20,30);繼續執行下去. 如果把if (r.equals(null))改成if (r == null)會比較合理.

    但是如果這是故意的(看起還完全不像). 那這表示寫程式者深信如果執行到if (r.equals(null))時, r一定不是null. 如果是null那就表示程式本身有問題不能繼續執行下去. 不如退出.

    如果你要英翻中的意思. 他是要你告訴他這樣寫錯在哪裡

    用這樣探測r是不是null的方法錯在哪裡

    Rectangle r;

    ...

    if (r.equals(null))

    r = new Rectangle(5,10,20,30);

    懂不懂? 不懂請再問

    Source(s): Myself
  • Anonymous
    1 decade ago

    在 JDK 中 , 兩個物件要比較是否相等, 多用 equals 方法

    例如:

     String a = "hello";

     String b = "hell" + "o";

     if (a.equals(b)) System.out.print( "a equal to b");

    物件存在, "程式電腦化"的說法, 就是它佔有一塊記憶體空間, 記錄著這個物件的

    成員資料member data, 以及 member function 的執行點。也因此有物件存在, 才可

    以使用其方法、取其成員資料的值...

    物件不存在, 我們稱這個物件為 null, 既然不存在, 更何況取其值或執行其成員函式。

    equals 方法就是物件的成員函式。

    你令一個不存在的物件去執行"成員函式", 程式電腦化的說法,它根本不知道要去那一個記憶體空間去執行這個方法, 因此會發生 null pointer exception

    那要如何判斷物件是否存在呢...

    if (r == null) System.out.print("物件 r 不存在");

    這樣子作就可以了~~~

    不止你問的 Rectangle 是如此, 其它所有物件要判斷是否不存在, 都要如是作~~~

  • Anonymous
    1 decade ago

    我同意龍的答案,而且equals()不能用來判斷null,要用另外的方法才行。

  • 1 decade ago

    我覺得這個程式本身就有問題的樣子... 不過還是照翻

    如果r等於null

    r就等於 new Rectangle(5,10,20,30);

  • How do you think about the answers? You can sign in to vote the answer.
  • Anonymous
    1 decade ago

    啥咪?解釋清楚一點好嗎

  • 1 decade ago

    若r不存在

    new Rectangle(5,10,20,30);

Still have questions? Get your answers by asking now.