我正在经历这样一个奇怪的时刻。
ArrayList<Object> a = new ArrayList<Object>();
a.add(new Socket());
a.add(new Thread());
a.add("three");
a.add(a);
a.add(new Object());
for(Object output : a) {
System.out.println(output);
}输出:
Socket[unconnected]
Thread[Thread-0,5,main]
three
[Socket[unconnected], Thread[Thread-0,5,main], three, (this Collection)]
java.lang.Object@615e7597每次我运行这个对象时,新对象总是提供相同的十六进制字符串(Java Integer.toHexString(hashCode())),为什么会这样呢?为什么每次都不会产生不同的字符串呢?还是因为它可以重用同一个对象?
编辑:我尝试过多次执行Java应用程序。
发布于 2013-11-21 11:41:06
如果System.out.println找到对象引用,它总是打印toString()方法。这里,List用不同的toString实现存储不同的对象引用。
ArrayList<Object> a = new ArrayList<Object>();
a.add(new Socket());例如,Socket类toString被重写为
public String toString() {
try {
if (isConnected())
return "Socket[addr=" + getImpl().getInetAddress() +
",port=" + getImpl().getPort() +
",localport=" + getImpl().getLocalPort() + "]";
} catch (SocketException e) {
}
return "Socket[unconnected]";
}因此,您将看到new Socket()的输出为Socket[unconnected]。
https://stackoverflow.com/questions/20119856
复制相似问题