WesenTCYS
2018-11-01 10:20
采纳率: 20%
浏览 525
已采纳

java判断线程名和一个字符串是否相等能用==吗?

System.out.println(Thread.currentThread().getName()+(Thread.currentThread().getName()=="L4"));
输出
L4false
然而在同学电脑(jdk10.2)上输出L4true,我的版本1.7
求解?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 一位凡人 2018-11-03 12:04
    已采纳

    手里没有jdk10 , 如果 == 为 true的话 很可能是线程名被创建到了**常量池** "L4"这个字符串也是从常量池引用过来的,
    所以Thread.currentThread().getName() =="L4" 为 true
    当然这只是推测 , 具体得看源码 , 我这是jdk1.8
    String val1 = "L4";
    String val2 = new String("L4");
    System.out.println(val1 == "L4"); true
    System.out.println(val1 == val2); false
    Thread thread = new Thread("L4");
    System.out.println(thread.getName()+"="+(thread.getName()=="L4")); true
    我认为1.7的创建线程应该是new了一个str

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 玄尺 2018-11-01 11:22

    ==是使用内存地址判断是否相同,所以两个字面值相同的字符串使用==进行判等不一定相同。对于你这个问题来说最好不要做不确定的事情。
    至于你同学使用的jdk10,这个问题有可能是版本导致的。

    评论
    解决 无用
    打赏 举报
  • qq_14823253 2018-11-02 02:01

    避免这种问题请用equals

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题