对于参考变量,以下哪项为真?打印参考变量不打印对象的地址
(ⅰ)打印参考将不打印由它称为对象 的地址
(ⅱ)打印参考将打印通过它称为对象 的地址
(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我可以将对象的地址存储在除引用之外的其他变量中吗?如果没有,那么它应该是一个原始指针 –