字符串类型的对比
1 | String str1= "Animal" ;<br>String str2= "Animal" ;<br>System.out.println( "str1 与 str2 :" +str1.equals(str2)); //n1 true<br>System.out.println("str1 与 str2 :"+(str1==str2));//n2 true<br>System.out.println("=====================");<br>String str3=new String("Animal");<br>String str4=new String("Animal");<br>System.out.println("str1 与 str2 :"+str3.equals(str4));//n3 true<br>System.out.println("str1 与 str2 :"+(str3==str4));//n4 false<br> |
为什么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版
- 参与学习 人
- 提交作业 9403 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧