黑马程序员技术交流社区
标题:
关于String变量的声明方式。
[打印本页]
作者:
wangning9130
时间:
2013-7-14 18:22
标题:
关于String变量的声明方式。
有一个问题关于String 的问题困扰了我很久,大家都知道 String s1=“abc”; 还有一种是 String s2 = new String(“abc”);
我现在只知道 s1 并不等同于s2。但是为什么? system.out.println(s1==s2)为什么会输出 false 呢???
作者:
wedge
时间:
2013-7-14 18:31
==是判断等号两边的对象在内存中的地址是否一样,s1和s2明显在内存中的地址不一致,不过使用equals方法来判断的话,是判断两个String对象的内容是否相等,这个时候返回的就是true.
作者:
杨增坤
时间:
2013-7-14 19:18
==比较的是内存的地址 equals比较的内容。
String s1=“abc”其中s1指向的是一个内存地址
String s2 = new String(“abc”);s2指向的是一个内存的地址
地址是不一样的!所以是false
要是用equals比较内容,那么即使true!
希望对你有帮助!
作者:
诸隆隆
时间:
2013-7-14 22:32
你创建了两个实例,所以引用类型指向不同的地址。==比较的是两个地址的值,不是内容。内容需要方法equals
作者:
诸隆隆
时间:
2013-7-14 22:32
你创建了两个实例,所以引用类型指向不同的地址。==比较的是两个地址的值,不是内容。内容需要方法equals
作者:
一木榜公
时间:
2013-7-14 23:39
本帖最后由 一木榜公 于 2013-7-14 23:41 编辑
大家都知道 String s1=“abc”; 还有一种是 String s2 = new String(“abc”);我现在只知道 s1 并不等同于s2。但是为什么?
s1,s2接收的是 对象的引用(也就是地址),"abc"字符串 存在常量池中,new String("abc")字符串在堆内存中,这是两个不同的对象,
地址不一样,
所以,s1!=s2
这两个语句还有一个区别是:
s1语句中只有一个对象,s2语句中有两个对象("abc" 与 s2指向的对象)
system.out.println(s1==s2)为什么会输出 false 呢???
s1,s2指向的对象地址不一样,所以false
作者:
白_蓝(八公)
时间:
2013-7-15 01:15
两种String的方法都是可行的,而你说的s1不等于s2,是指引用指向不同,也就是地址值的不同!我们main函数运行的时候先会在栈内存中,然后s1,s2会在堆内存中开辟两个空间存放相对应的值!!你s1==s2,比较的不是值,是栈内存中指向堆内存的那个地址值的比较,他们两个都有各自的空间,当然就不可能相同啦!因为不是同一个空间嘛!!如果是比较值的话你可以使用equals方法~那么就会相等了
作者:
sunalong
时间:
2013-7-15 17:53
==是判断等号两边的对象在内存中的地址是否一样,
String s1=“abc”; //分配了一个地址给s1
String s2 = new String(“abc”);//又分配了一个新地址给s2
s1和s2明显在内存中的地址不一致,
equals是判断两个String对象的内容是否相等,
public class test{
public static void main(String[] args){
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1.equals(s2));//true
System.out.println(s1==s2);//false
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2