慕仙4185161
2019-02-14 13:27
String str1="hello";
String str2="hello";
System.out.println("str1等于str2:" + (str1 == str2));
==表示的是引用的内存地址是否相同,而equals表示的是内存里面的值是否相同
==
在对于八大基本数据类型来说,用==是表示 值等于
在对于引用数据类型来说,用==表示比较是不是同一个对象,即对象存在的堆空间地址是否相等
引用对象如果想要比较值是否相等,请用 equals()方法,这个是用于(基本数据类型的)值比较的方法
对于字符串的声明有两种方式
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
你写的不是两个hello么,为什么不是true?
== 是指值相同
Java入门第一季(IDEA工具)升级版
1165171 学习 · 17581 问题
相似问题