本帖最后由 鸿鹄2008 于 2015-2-13 01:03 编辑
因受 @qq892131 回复的启发,看到最后那两句我有不解的地方(后面说),所以这样回复楼主和 qq892131
觉得这样改动下,方便看明白是怎么回事和方便描述,可以试着跑下- public class Foo {
- public static void main(String[] args) {
- String aStr="ABCDEFG";
- String bStr = aStr.substring(3); //
- System.out.println(aStr + "\t地址:" + aStr.hashCode());
- System.out.println(bStr + "\t地址:" + bStr.hashCode());
- System.out.println("\t====================");
- String cStr = aStr.concat("123");
- System.out.println(aStr + "\t地址:" + aStr.hashCode());
- System.out.println(cStr + "\t地址:" + cStr.hashCode());
- System.out.println("\t=====================");
-
- String dStr = new String ("ABCDEFG");
- System.out.println(aStr == dStr);//false
- System.out.println(aStr.equals(dStr));
- System.out.println(aStr.hashCode());
- System.out.println(dStr.hashCode());
- }
- }
复制代码
String bStr = aStr.substring(3);
这里头:返回一个 新的String对象,此对象存的是 aStr字符串从第3个下标到字符串结尾,就是“DEFG”。
返回的是一个aStr的字串,是一个新字符串对象,没有直接对原字符串aStr改动。
String cStr = aStr.concat("123");
返回一个新的String对象,此对象是先把aStr的内容复制过来,再把字符串“123”接上去,就是"ABCDEFG123"。
也是没有直接对原字符串aStr该改动。
这里有点不明白了,向大家求解
System.out.println(aStr == dStr);//false
判断aStr和dStr是否为同一个对象结果是false
我理解为 他们不是同一个对象。
System.out.println(aStr.equals(dStr));
判断aStr和dStr是否字符串值一样,也就是说 是否为 相同的字符序列,结果是true,明显是相同的字符序列
System.out.println(aStr.hashCode());
System.out.println(dStr.hashCode());
输出aStr和dStr两个对象的地址,结果两个地址相同,
问题1:竟然指向相同的地址,为什么 aStr == dStr的结果是false?
问题2:如果aStr和dStr是两个不同的对象,那么为什么指向地址相同??
|