为什么如下代码会输出"ABCDE"
foo= "ABCDE";
foo.substring(3);
foo.concat("XYZ");
System.out.println(foo); 而这样就输出"DE"
String fo= "ABCDE".substring(3);
fo.concat("XYZ");
System.out.println(fo);
如下又输出"DEXYZ"
String fo= "ABCDE".substring(3).concat("XYZ");
System.out.println(fo);
String fo= "ABCDE".substring(3);
就有复制给 foconcat 同样的道理!
如果foo=foo.substring(3);foo=foo.concat("XYZ");第一个就对了,第二段程序以此类推。
楼下会有详细解释的,hoho~
当String的方法被调用时,通常会生成很多新的String常量:
如你上面:
foo= "ABCDE";
foo.substring(3); //生成新的String常量: "DE"
foo.concat("XYZ"); //生成新的常量"ABCDEXYZ"
String fo= "ABCDE".substring(3); //生成两个常量“ABCDE”和“DE”
fo.concat("XYZ"); //生成新的常量“DEXYZ”
这下明白了吧?
你改了二。但是打印的是一。(剩下就交给java垃圾收机制)
明白?
为什么如下代码会输出"ABCDE"
foo= "ABCDE"; //不管你怎么操作foo是不会变的!String是恒常类!
foo.substring(3);
foo.concat("XYZ");
System.out.println(foo); 而这样就输出"DE"
String fo= "ABCDE".substring(3); //这里它已经DE了
fo.concat("XYZ");
System.out.println(fo);
如下又输出"DEXYZ"
String fo= "ABCDE".substring(3).concat("XYZ"); //DE+XYZ=DEXYZ
System.out.println(fo);
努力加油!!!