对于参考变量,以下哪项为TRUE?
(i)打印参考不会打印对象的地址 由它引用
(ii)打印参考将打印对象的地址 由它引用
(iii)&操作符不能用于参考变量进行打印 他们的地址
(iv)&运算符可以用于引用变量来打印它们 地址
答案:我和iii
但据我所知,引用是一个指向对象地址的指针。因此,当它直接打印时,它应该打印该对象的地址并使用&使用引用变量将打印自己的地址。
答案 0 :(得分:3)
使用System.out.print()打印对象引用时。在内部,它使用String.valueOf(object)
来打印对象。 String.valueOf(object)
内部调用object.toString()
方法,如果您没有覆盖班级中的Object
,则会调用toString()
班级中定义的toString()的默认实施方式
根据Javadocs,
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,at符号字符“@”以及哈希代码的无符号十六进制表示形式组成。对象。
现在,如果您查看hashCode()的Javadoc,它会说
尽可能合理,但Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
因此,您实际上并不打印所引用对象的地址。
其次,&
只是一个按位AND运算符。 ANDs 它操作的两个操作数的各个位。您不能在单个对象引用变量上使用它。请Java tutorials了解有关&
运算符使用的更多信息。
答案 1 :(得分:2)
所以,你似乎不同意那个多项选择答案的答案。考虑一下:
String s = "Hello world.";
System.out.println(s);
s
的类型为String
,它是一个类,它是Java中的引用类型。但是当你打印s
时,你会得到打印的字符串,而不是地址。所以,(i)是真的而不是(ii)。
关于&
运算符,您需要了解一些事项。
&
不是“地址”运算符,因为语言设计者已经这样定义了它。没有“地址”运算符,无论引用是否实现为简单指针。当然,这背后的哲学是避免指针算术和内存安全。所以,再次,它是(iii)而不是(iv)。