加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Runnable.toString()什么时候可以返回重复的String?

发布时间:2020-12-15 05:12:01 所属栏目:Java 来源:网络整理
导读:this.toString()什么时候可能返回重复的String? public static void main(java.lang.String s[]) { for(int i=0;i155000;i++) { new Thread(new Runnable() { public void run() { System.out.println(this.toString()); } }).start(); }} 解决方法 托马斯
this.toString()什么时候可能返回重复的String?

public static void main(java.lang.String s[]) {
    for(int i=0;i<155000;i++) {
        new Thread(new Runnable() {
            public void run() {
                System.out.println(this.toString());
            }
        }).start();
    }
}

解决方法

托马斯的回答是正确的,因为将调用Object的默认toString()方法,该方法为不同的对象生成不同的字符串.

有一点需要注意. Object.toString()返回:

return getClass().getName() + "@" + Integer.toHexString(hashCode());

它包括Object.hashCode(). hashCode()的Javadoc指出:

…the hashCode method defined by class Object does return distinct integers for distinct objects

关键是hashCode()对于不同的对象将是不同的.由于您的代码不存储创建的Runnables,因此一旦线程完成,它们将被垃圾收集.一旦从内存中删除了一个对象,另一个Object就可以在内存中占据一席之地,新的Runnable可能会提供前一个Runnable返回的相同哈希码,该哈希码现在已不复存在.

所以理论上你可能会看到不确定地打印相同的字符串(尽管机会很小).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读