为了账号安全,请及时绑定邮箱和手机立即绑定

调用类里面的String为什么可以用“==”判定是否相等?有简图,求教。

调用类里面的String为什么可以用“==”判定是否相等?有简图,求教。

专注当下4143035 2016-12-31 16:48:43
类Te里的属性s为什么用可用 == 比较?请问这块的内存空间怎么判定?
查看完整描述

10 回答

已采纳
?
四无小青年

TA贡献88条经验 获得超43个赞

这个要设涉及到String数据类型的创建模式,如果你是直接采用String value来声明String的话,系统会先到字符串常量池中去寻找是否存在相同值得字符串如果存在就把新声明的字符串指向那个已存在的,这就是享元模式。所以其实所有相同值的字符串在系统中是同一个引用地址。如果是new String()那不管是否存在相同的值都会重写创建新的。若解惑,望采纳

查看完整回答
反对 回复 2017-01-01
?
zeng_建军

TA贡献25条经验 获得超16个赞

使用String str = "Hello World";方式声明的str是存放在栈内存,是常量方式存放。被放在常量池中,当再次声明字符串("Hello World)时,实际是把新的变量地址指向常量池中的Hello World

使用String str = new Strin("Hello World");方式声明的str存放在堆内存,是对象。

你的Te类的s是由第一种方式声明的,所以两个相等字符串的内存地址是相同的。虽然te1和te2两个对象的地址不同,但是他们的属性s指向的地址相同,所以可以用 == 判等。

查看完整回答
1 反对 回复 2017-01-02
  • 专注当下4143035
    专注当下4143035
    谢谢您,您的帮助同样解答了我的疑惑,我很感谢。但因有人更早回答了,所以并没有采纳,望见谅。
  • zeng_建军
    zeng_建军
    采不采纳的我不是很在意
  • zeng_建军
    zeng_建军
    只要大家能够得到答案就好了,我也经常在这里问问题
?
杜牧之

TA贡献10条经验 获得超2个赞

==比较的是内存地址,new出来的对象,内存地址不同,所有比较结果是FALSE

查看完整回答
反对 回复 2017-01-01
?
专注当下4143035

TA贡献2条经验 获得超0个赞

te1和te2的堆空间里肯定不同,所以这里判定的是te1.s  , te2.s  指向的是同一个date sgement空间里的地址?

并且这里判定的也是s属性指向的date sgement的地址?

查看完整回答
反对 回复 2017-01-01
?
专注当下4143035

TA贡献2条经验 获得超0个赞

//img1.sycdn.imooc.com//5868a47100012d5f09390890.jpg

抱歉,图没传完整,意思没传达好。我的意思是用 == 号测试的是内存地址,所以应该返回false才对,为什么是true?

查看完整回答
反对 回复 2017-01-01
  • 望远
    望远
    你传入的参数是一个字符串常量,它保存在常量池中,而且只有一个,所以比较时可以直接用==返回true,你将参数换成new String("…")这样直接用==就会返回false
?
aaaaaaaaten

TA贡献63条经验 获得超16个赞


你这里的te1 是新建的一个对象实例,te2也是新建的一个对象实例,

两个实例纯在于不同的位子,在这里的 ==判断的是内存空间的地址,,,


你可以试一下用-----te1.equals(te2)----方法来测试一下,

这个是判断内容是否相等的方法。


求采纳

查看完整回答
反对 回复 2017-01-01
?
扬帆_起航

TA贡献3条经验 获得超0个赞

==号只能比较地址值,之所以能比较字符串是因为字符串也是个对象只是这个对象不是在堆中而是在常量池里。而常量是唯一,所以在这个例子中能比较
查看完整回答
反对 回复 2017-01-01
?
飞在南方

TA贡献2条经验 获得超0个赞

我测试是false

//img1.sycdn.imooc.com//5867baad00017f2910650482.jpg

查看完整回答
反对 回复 2016-12-31
?
诡圣

TA贡献14条经验 获得超2个赞

现在这样写等于:

String te3 = "用 == 为什么不是false";
String te4 = "用 == 为什么不是false"; 
System.out.println(te3 == te4);

能看懂了么,这个应该内存分析过了

查看完整回答
反对 回复 2016-12-31
  • 10 回答
  • 0 关注
  • 2904 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信