首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >‘()’似乎没有创建一个新对象,为什么?

‘()’似乎没有创建一个新对象,为什么?
EN

Stack Overflow用户
提问于 2013-11-21 11:34:02
回答 5查看 206关注 0票数 5

我正在经历这样一个奇怪的时刻。

代码语言:javascript
运行
复制
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);
}

输出:

代码语言:javascript
运行
复制
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应用程序。

EN

Stack Overflow用户

发布于 2013-11-21 11:41:06

如果System.out.println找到对象引用,它总是打印toString()方法。这里,List用不同的toString实现存储不同的对象引用。

代码语言:javascript
运行
复制
 ArrayList<Object> a = new ArrayList<Object>();
    a.add(new Socket());

例如,SockettoString被重写为

代码语言:javascript
运行
复制
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]

票数 -1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20119856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档