對於參考變量,以下哪項爲真?打印參考變量不打印對象的地址
(ⅰ)打印參考將不打印由它稱爲對象 的地址
(ⅱ)打印參考將打印通過它稱爲對象 的地址
(III) &操作者不能對參考變量可以用來打印 其地址
(ⅳ)操作者&可以對參考變量被用來打印他們 地址
答案:根據我I和III
但參考是指向該對象的地址的指針。所以當它直接打印時,它應該打印該對象的地址,並且使用帶有參考變量的&將打印它自己的地址。
對於參考變量,以下哪項爲真?打印參考變量不打印對象的地址
(ⅰ)打印參考將不打印由它稱爲對象 的地址
(ⅱ)打印參考將打印通過它稱爲對象 的地址
(III) &操作者不能對參考變量可以用來打印 其地址
(ⅳ)操作者&可以對參考變量被用來打印他們 地址
答案:根據我I和III
但參考是指向該對象的地址的指針。所以當它直接打印時,它應該打印該對象的地址,並且使用帶有參考變量的&將打印它自己的地址。
所以,你似乎不同意這個多選答案的給定答案。試想一下:
String s = "Hello world.";
System.out.println(s);
s
是String
類型,這是一類,它是Java中的引用類型。然而,當您打印s
時,您會得到打印的字符串,而不是地址。所以,(i)是真實的而不是(ii)。
關於&
運營商,有些事情您需要了解。
&
不是「操作符的地址」,因爲語言設計者已經這樣定義它。無論是否將引用實現爲簡單指針,都不存在「地址」操作符。背後的哲學當然是避免指針算術和內存安全。所以,它是(iii)而不是(iv)。
非常感謝。這是非常詳細闡述。 現在你已經提出了一個更多的懷疑,這個雙指針和三指針是什麼,你說它也可能是雙指針或三指針。這是否意味着它應該是一個指針? –
@rakeshkumar他們只是其中的一些例子,理論上它可能是。在Java實踐中,它們絕對不是**。 –
好的。不管怎麼說,還是要謝謝你... –
當您使用System.out.print()打印對象引用。它在內部使用String.valueOf(object)
來打印對象。 String.valueOf(object)
內部調用object.toString()
方法將調用Object
類中定義的toString()的默認實現,如果您尚未覆蓋班級中的toString()
。
作爲每的Javadoc,
Object類的toString方法返回一個由其中的對象是一個實例,該符號字符'@」的類的名稱的字符串,並且無符號對象的哈希碼的十六進制表示。
現在,如果你考慮的Javadoc hashCode(),它說
儘可能多是合理可行的,由Object類定義的hashCode方法不會返回不同的整數針對不同的對象。 (這一般是通過將該對象的內部地址轉換成一個整數來實現,而不是由的JavaTM編程語言不需要這種實現技巧。)
因此,你實際上不打印對象的地址引用。
其次,&
只是一個按位AND運算符。它和它操作的兩個操作數的各個位有關。您不能在單個對象引用變量上使用它。請參閱Java tutorials以瞭解有關使用&
運算符的更多信息。
那你試過了嗎?引用是「獲得對象的某種方式」 - 它不一定是一個原始指針。不,使用'&'與引用類型變量將無法編譯。在我看來,你可以自己很容易地驗證這兩個。 –
我是新來的java和我正在應用c + +概念。 –
@JonSkeet我可以將對象的地址存儲在除引用之外的其他變量中嗎?如果沒有,那麼它應該是一個原始指針 –