1 c == d:这个应该是编译器做的优化,因为你用的是"Heipark",在编译器分配给他空间后,下一次在有这个对象的时候编译器引用了同一个地址,所以为true. 2 String a = new String("123"); 和String a = "123" 这个区别是String a = new String("123"); 当你用这个语法的时候编译器所做的是:先有一个string的变量引用到“123”,然后在用这个引用new一个对象出来,然后在把这个对象的引用赋值给a。就好像是这样的代码: String temp = "123"; String a = new String(temp); 当然与string a = “123”不一样啦。
wangcx(我侵蚀着孤独) 说的有道理
String a = new String("123"); 和String a = "123";不一样。前面new了一个,说明给“123”开辟了自己的一段新的内存空间。这些在张孝祥的教程里讲的很清楚。在www.manfen.net里有视频教学,可以用bt下载。
小弟愚笨,恕小弟多问几句 1. String a = new String("Heipark"); 这句话的意思是声明了一个指向字符串对象"Heipark"的引用s, s的意义类似其他语言的指针。 a是引用, 字符串"Heipark"是对象 我说的对吗?? 2. 有个Person类 Person mary = new Person(); 这句话的建立的mary是对象吗?这句话的解释方法和上面的一样吗??
关于问题的解答: 1、关于==测试相等,它只能判别两个串是否存储在同一个位置。 String a = new String("Heipark"); String b = new String("Heipark"); 由于String a , b 都是由String生成了一个新的对象,那么虽然对象的值相等, 但是不再同一个内存区域,所以 System.out.println("a == b ->" + (a == b)); 的结果是a == b ->false2、关于.equals测试相等,这个书上提到是可以用来测试两个串的正确用法。 System.out.println("a.equals(b) ->" + a.equals(b)); 所以a.equals(b) ->true3、关于String a = "b";和String a = new String("b");的问题 Because String objects are immutable they can be shared. For example: String str = "abc"; is equivalent to: char data[] = {'a', 'b', 'c'}; String str = new String(data); 大意就是字符串是可以共享的,就是当你 String c = "Heipark"; String d = "Heipark"; 其实只有一个对象(可能是匿名的),c,d共同指向那个对象。 而 String a = new String("Heipark"); String b = new String("Heipark"); 是先创建对象在赋值,所以虽然值相同但是不是同一个对象。 我想这样解释的话,后面的答案就显而易见了。 >-----------------------------<参考资料: Java核心技术卷一:String部分48-49页 Java API (Sun WebSite) java.lang.String
2 String a = new String("123"); 和String a = "123"
这个区别是String a = new String("123"); 当你用这个语法的时候编译器所做的是:先有一个string的变量引用到“123”,然后在用这个引用new一个对象出来,然后在把这个对象的引用赋值给a。就好像是这样的代码: String temp = "123";
String a = new String(temp);
当然与string a = “123”不一样啦。
说的有道理
1.
String a = new String("Heipark");
这句话的意思是声明了一个指向字符串对象"Heipark"的引用s, s的意义类似其他语言的指针。
a是引用, 字符串"Heipark"是对象
我说的对吗??
2.
有个Person类
Person mary = new Person();
这句话的建立的mary是对象吗?这句话的解释方法和上面的一样吗??
1 - Heipark因为new操作分配了一段新的内存空间,而a“指向”了这段空间
2 - 这里的mary是一个引用,而不是对象,这里真正的对象是new Person()所分配的空间
1、关于==测试相等,它只能判别两个串是否存储在同一个位置。
String a = new String("Heipark");
String b = new String("Heipark");
由于String a , b 都是由String生成了一个新的对象,那么虽然对象的值相等,
但是不再同一个内存区域,所以
System.out.println("a == b ->" + (a == b));
的结果是a == b ->false2、关于.equals测试相等,这个书上提到是可以用来测试两个串的正确用法。
System.out.println("a.equals(b) ->" + a.equals(b));
所以a.equals(b) ->true3、关于String a = "b";和String a = new String("b");的问题
Because String objects are immutable they can be shared. For example:
String str = "abc";
is equivalent to:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
大意就是字符串是可以共享的,就是当你
String c = "Heipark";
String d = "Heipark";
其实只有一个对象(可能是匿名的),c,d共同指向那个对象。
而
String a = new String("Heipark");
String b = new String("Heipark");
是先创建对象在赋值,所以虽然值相同但是不是同一个对象。
我想这样解释的话,后面的答案就显而易见了。
>-----------------------------<参考资料:
Java核心技术卷一:String部分48-49页
Java API (Sun WebSite) java.lang.String
a==b 就像是一对双胞胎,虽然它们表面上看上去很像,但是毕竟是兄弟,而不是一个人.!
而c==d 就好比是c为d取的一个别名,c和d代表的是同一个人,所以它们就相等喽!~~~
张孝祥:java就业培训教程!!!
面向对象上,82页```