一个小问题求教

w1931631 2019-10-18 05:14:03
package thread;

public class zz {

public static void main(String[] args) {

String a="bc";
if(a=="bc"){System.out.println("why");}
String b=Thread.currentThread().getName();
System.out.println(b);
if(b=="main"){System.out.println("11");}
}

}




上面这个代码为什么11没有被输出呢??b不是已经被赋值为“main”了吗?小白求教
...全文
60 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷幽悠 2019-10-21
  • 打赏
  • 举报
回复
值比较 、 对象比较
w1931631 2019-10-18
  • 打赏
  • 举报
回复
懂了 谢谢大家!
w1931631 2019-10-18
  • 打赏
  • 举报
回复
那为什么if(a=="bc"){System.out.println("why");} 这一项能打印出来呢?
qybao 2019-10-18
  • 打赏
  • 举报
回复
字符串的比较用equals
==是比较引用对象的内存信息
至于为什么a和“bc”比较可以用==,那是有个常量池的概念,a引用的内存直接存的是常量“bc”的地址,但b不一样,是通过getName方法来赋值的,所以b引用的内存存的是getName返回的对象的地址,这个地址是不同于“main”常量的地址的,所以==行不通,所以应该用equals来比较两个对象的内容
qq_39936465 2019-10-18
  • 打赏
  • 举报
回复
看错了,String b赋值后b保存的是堆内存地址,所以“main”的地址是保存再常量池,比较地址肯定不一样。
qq_39936465 2019-10-18
  • 打赏
  • 举报
回复
你打印下b就知道结果了
qq_39936465 2019-10-18
  • 打赏
  • 举报
回复
引用 楼主 w1931631 的回复:
上面这个代码为什么11没有被输出呢??b不是已经被赋值为“main”了吗?小白求教
==不是赋值是比较,=是赋值

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧