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

==不是应该表示同一吗 同一的话是指地址相同 str1和str2显然不是同一地址 为什么显示true

String str1="hello";

String str2="hello";

System.out.println("str1等于str2:" + (str1 ==  str2));

正在回答

5 回答

==表示的是引用的内存地址是否相同,而equals表示的是内存里面的值是否相同

0 回复 有任何疑惑可以回复我~

==
在对于八大基本数据类型来说,用==是表示      值等于
在对于引用数据类型来说,用==表示比较是不是同一个对象,即对象存在的堆空间地址是否相等

引用对象如果想要比较值是否相等,请用  equals()方法,这个是用于(基本数据类型的)值比较的方法

3 回复 有任何疑惑可以回复我~
#1

hongjun500

正解!精辟
2019-02-15 回复 有任何疑惑可以回复我~

对于字符串的声明有两种方式
1、使用常量池:即String  a = "aaaaa";

a存放在栈中,指向常量池中的aaaaa

(常量池中的值不存在相同的值)
若String b="aaaaa";就相当于也指向常量池中的aaaaa

!!!!!!!
变量a和b的第一手指向都是同一个值,在常量池中aaaaa只存在一个,所以常量池地址唯一不会变,因此比较的其实是常量池同一个值得地址
a==b为true,这就是你想要的答案!!!!!!!

2、使用堆空间:   即String   c=new String("aaaaa");
c变量名存放在栈空间,对象new String("aaaaa") 存放在堆空间,对象中的值aaaaa则是存在于常量池
变量c的第一手指向则为堆空间的地址,堆空间中new String("aaaaa") 可以有多个,所以即便值相同的情况下,用new String()的方式创建的对象去比较 == 两个对象的地址是不同的(堆or常量池)空间地址,所以

是堆空间地址的比较
若 String  d=new String("aaaaa");

c == d  为false  ,尽管值都是aaaaa,但是堆空间地址不一样,所以为false
a ==c    为false  ,一个是常量池地址,一个是堆空间地址,不会相等 ,false

12 回复 有任何疑惑可以回复我~

你写的不是两个hello么,为什么不是true?

0 回复 有任何疑惑可以回复我~
#1

慕仙4185161 提问者

我在学习JAVA中有一个小节讲的是相等与同一 书上是这么说的 如果两个对象具有相同的类型和相同的属性值,则称这两个对象相等;如果两个引用变量指向的是同一个对象,则称这两个变量(对象)同一。 当使用通常的等号“==”来判断两个对象是否“相等”时,实际上判断的是这两个对象是否同一。 老师在授课是讲的是 同一表示的是地址相同
2019-02-14 回复 有任何疑惑可以回复我~

== 是指值相同

0 回复 有任何疑惑可以回复我~
#1

慕仙4185161 提问者

我在学习JAVA中有一个小节讲的是相等与同一 书上是这么说的 如果两个对象具有相同的类型和相同的属性值,则称这两个对象相等;如果两个引用变量指向的是同一个对象,则称这两个变量(对象)同一。 当使用通常的等号“==”来判断两个对象是否“相等”时,实际上判断的是这两个对象是否同一。 老师在授课是讲的是 同一表示的是地址相同
2019-02-14 回复 有任何疑惑可以回复我~
#2

iloveyoulcx 回复 慕仙4185161 提问者

昨天没睡醒。。。。请看3L的是正确答案
2019-02-15 回复 有任何疑惑可以回复我~
#3

qq_霹雳火_1 回复 慕仙4185161 提问者

在实际开发情况中,有时候会需要对比两个相同类型的引用对象,想一想对象怎么比较? 这个一般用【对象.equals()和hashcode()】,实际上你说的对象是否是同一个说的是开发过程中这两个对象的属性是否一致,所以就牵扯到了在子类【重写】object的equals方法,在其中编写判断两个对象属性的规则
2019-05-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

==不是应该表示同一吗 同一的话是指地址相同 str1和str2显然不是同一地址 为什么显示true

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信