WesenTCYS
WesenTCYS
采纳率100%
2018-11-01 10:20

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

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • u012309392 一位凡人 3年前

    手里没有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

    点赞 1 评论 复制链接分享
  • weixin_37893887 玄尺 3年前

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

    点赞 1 评论 复制链接分享
  • qq_14823253 qq_14823253 3年前

    避免这种问题请用equals

    点赞 评论 复制链接分享