字符串类型的对比
String str1="Animal";
String str2="Animal";
System.out.println("str1 与 str2 :"+str1.equals(str2));//n1 true
System.out.println("str1 与 str2 :"+(str1==str2));//n2 true
System.out.println("=====================");
String str3=new String("Animal");
String str4=new String("Animal");
System.out.println("str1 与 str2 :"+str3.equals(str4));//n3 true
System.out.println("str1 与 str2 :"+(str3==str4));//n4 false
为什么String直接赋值与new创建的相同字符串,使用==对比的时候返回值不一样呢?(n2与n4处打印值)
18
收起
正在回答
1回答
同学你好,
1、String str = "xxx";以这种方式赋值时,JVM会先从字符串常量池中查询是否存在"xxx"这个对象,
如果存在,直接把常量池中"xxx"的地址返回给str。如果不存在,则会在常量池中创建"xxx"对象,并把该对象的地址返回给str。
所以通过==比较时,str1,str2指向的是同一地址,所以返回true;
若不存在则会在常量池中创建"xxx"对象,同时在堆中创建"xxx"这个对象,然后将堆中的这个对象的地址返回赋给引用str3。
若常量池存在则直接在堆中创建"xxx"这个对象,然后将堆中的这个对象的地址返回赋给引用str3。
这时str3和str4分别指向堆中不同的地址,所以返回false;
祝学习愉快~
java工程师2020版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星