黑马程序员技术交流社区
标题:
String比较问题
[打印本页]
作者:
adamjy
时间:
2014-4-5 15:42
标题:
String比较问题
public class Person {
public static void main(String[] args)
{
String s = "hello,world";
String s1 = "hello,";
String s2 = "world";
System.out.println(s == s1 +s2);
System.out.println(s =="hello,"+"world" );
}
}
复制代码
为什么输出是
false
true
作者:
yanzhendong
时间:
2014-4-5 15:51
字符串比较的是地址,如果想要比较里面的内容的话这样:s.equals(s1+s2)
作者:
一年_Hei
时间:
2014-4-5 15:56
因为 == 是比较内存地址的引用,所以第一肯定是false,第二个true,是因为字符串常量池中存在"hello,world",s =="hello,"+"world" 这里直接引用了常量池的"hello,world",所以为true
作者:
郭黎明
时间:
2014-4-5 16:08
public class Person {
public static void main(String[] args)
{
String s = "hello,world"; //这里的s是一个对象
String s1 = "hello,"; //这里的s1也是一个对象
String s2 = "world"; //这里s2也是对象
System.out.println(s == s1 +s2);// s == s1 +s2 这个是判断s对象的地址值是否等于s1对象和s2对象的地址之和,肯定不等的
System.out.println(s =="hello,"+"world" ); //因为String重写了object的equals方法,s的字母组成和字符串"hello,world"相同所以这里比较时会相等。
}
}
作者:
请备注
时间:
2014-4-5 16:56
http://bbs.itheima.com/thread-112461-1-1.html
这个链接里有详细说明
作者:
陈振宇
时间:
2014-4-6 06:47
public class Person {
public static void main(String[] args)
{
String s = "hello,world";//在内存堆栈中创建一个String类型的对象“hello world”
String s1 = "hello,";//在内存堆栈中创建另一个String类型的对象“Hello”
String s2 = "world";//在内存在创建一个String对象“world”
System.out.println(s == s1 +s2);//判断s1+s2的地址值是否和s相等,显然是false
System.out.println(s =="hello,"+"world" ); //由于Sring在内存堆栈中有一个String池,故==右边的对象同样也是第一次创建的“hello world”,所以返回true
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2