通过一个小例子引发的string对象对于“==”的问题

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:48   973   0



这个例子是我郁闷了一会,首先我们知道==是用来判断对象的内存地址的,那么我们根据以上的图,来看一下有什么问题

1.str1和str3,他们是两个对象,也就是说他们的内存地址是不同的,那为什么用==的时候结果会是true?

2.我们来对照str1,str2和str4,str5,new String("welcome")和"welcome"是同一个意思,都是new了一个新的string对象,然后将这个对象赋予给声明的对象,那么为什么str1 ==str2是false,而str4==str5是true?

结合以上问题,再加上和大神们的激烈探讨,我终于明白了。

1.string的赋值如果是直接“welcome”这种形式的话,那么,java会想去内存中查看有无类似的值,如果已存在,那么就将该值的引用赋予string对象,这也就是强大的享元模式,我只知道java中对于基本类型有享元模式,没想到对于引用类型也会有。

2.new String 和 “” 本来都是创建新的对象,但是为什么只有“”使用了享元模式呢,我们可以这么来想一下,new String其实可以看成是一个强硬的手段,他强迫你必须给我创建新的对象,而“”就比较温柔,他想帮你去找是否有相同的值,然后在进行下面的操作。

3.通过以上的认识,我明白了一个事情,那就是==其实是判断引用类型的内存地址,在以往的教学资料中,撑说==是来判断对象的内存地址,但是到底是谁的内存地址,是声明的对象,还是引用对象,没有给出答案,通过这次的探讨。我终于明白了,==是来判断引用对象的内存地址。


以上是我对于这个问题的想法思路和探讨结果,希望对各位有帮助,如果又补充欢迎留言。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP