黑马程序员技术交流社区
标题:
String类问题
[打印本页]
作者:
张远游
时间:
2012-11-29 18:43
标题:
String类问题
class stringTest
{
public static void main(String[] args)
{
String str = "abc";
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str == str1); //true
System.out.println(str1 == "abc"); //true
System.out.println(str2 == "abc");
//false
System.out.println(str1 == str2); //false
System.out.println(str1.equals(str2)); //true
}
}
还是不太懂,求大师给详细解释下。
作者:
孟伟娟
时间:
2012-11-29 19:00
String在new对象时,一旦对象建立,其值就不再改变。
String str = "abc"; (1)
String str1 = "abc"; (2)
String str2 = new String("abc"); (3)
(1) 行str建立了一个对象,内容为“abc”。str引用指向内容为“abc”的对象。
(2)行 str1 建立对象时,发现对象内容也是“abc”,此时不再建立对象,而是把str1 的引用指向该对象。str和str1 都指向同一对象
(3)行在内存中有两个对象,又创建了另外一个内容为“abc”的对象,str2引用指向它。
所以str == str1 str1 == "abc"为true。 而str2和str1不是指向同一个对象,str2==“abc” str1==str2 为false
String类中的equals方法比较的是对象中的内容,所以str1.equals(str2)为true。
作者:
孙万利
时间:
2012-11-29 19:13
class stringTest
{
public static void main(String[] args)
{
String str = "abc";
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str == str1); //true
System.out.println(str1 == "abc"); //true
System.out.println(str2 == "abc"); //false
System.out.println(str1 == str2); //false
System.out.println(str1.equals(str2)); //true
}
}
1.String str = "abc";
这句是创建一个对象str,对象初始化为字符串abc
2.String str1 = "abc";
这句是创建一个对象str1 ,对象初始化为字符串abc
3.String str2 = new String("abc");
这句是创建了两个对象,str2和指向字符串abc的对象;
下边就顺理成章了
System.out.println(str == str1); //true 具有相同的指向abc,所以 true
System.out.println(str1 == "abc"); //true 初始化内容就是abc和abc 完全一样,所以 true
System.out.println(str2 == "abc"); //false str2是一个对象,abc是字符串所以不全等,所以 false
System.out.println(str1 == str2); //false str1是单一对象,而str2却不是单一对象,所以 false
System.out.println(str1.equals(str2)); //true equals是比较对象中存在的内容 str1和str2中都是 abc,所以 true
作者:
张远游
时间:
2012-11-29 19:26
孟伟娟 发表于 2012-11-29 19:00
String在new对象时,一旦对象建立,其值就不再改变。
String str = "abc"; (1)
String str1 = "a ...
str=“abc”是在常量池中创建对象,如果池中已有对象“abc”,则str1=“abc”不在创建新的对象,str、str1指向同一个对象“abc”;str2是在堆内存中建立新的对象,故str2与前两个引用指向不同,但是内容相同。问题是str2==“abc”中,“abc”是指的常量池中的“abc”还是堆内存中“abc”呢?此处比较的是地址么?我有点搞不太懂
作者:
陈山
时间:
2012-11-29 20:48
注解如下:
class stringTest
{
public static void main(String[] args)
{
String str = "abc";
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str == str1); //因为都指向的是常量池中的“abc” ,所以地址相同,结果为true
System.out.println(str1 == "abc"); //str1指向的就是“abc”,所以str1存储的地址值跟“abc”的地址相等,结果为true
System.out.println(str2 == "abc"); //str2指向的是堆区里面的一个String对象,地址值跟常量池里“abc”的地址值肯定不相等,所以false
System.out.println(str1 == str2); //str2指向的是堆区里面的一个String对象,str1指向的是常量池中的“abc”,所以false
System.out.println(str1.equals(str2)); //equals比的是具体对象的值,因为对象值都为“abc”,所以为true
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2