黑马程序员技术交流社区
标题:
关于String
[打印本页]
作者:
up_
时间:
2012-10-25 17:52
标题:
关于String
public class Demo {
public static void main(String[] args) {
String strValue="ABCDEFG";
strValue.substring(3);
strValue.concat("123");
System.out.println("result=" + strValue);
String value = new String ("ABCDEFG");
System.out.println(strValue == value);
}
}
运行结果 result=ABCDEFG//这里为什么是这个结果,内存中的加载过程是怎样的?
false
作者:
程杰
时间:
2012-10-25 18:21
你那个strValue.substring(3); strValue.concat("123");就没给赋值呀。我改了下
public class Demo {
public static void main(String[] args) {
String strValue="ABCDEFG";
String a = strValue.substring(3);
String b = strValue.concat("123");
String c = a+b;
System.out.println("result=" + c);
String value = new String ("ABCDEFG");
System.out.println(strValue == value);
}
打印结果:result=DEFGABCDEFG123
false
至于最后的false。他是因为是对象所有判断对象的引用是否指向相同,很明显value和strValue他指向各自的对象。如果你用=号的话,就是把value指向付给strValue。
作者:
付维翔
时间:
2012-10-25 18:30
因为你调用了这个方法之后strValue.substring(3); strValue.concat("123");,没有改变strValue的值,只有当strValue=strValue.substring(3); 这样写是值才会改变,因此result值不变是ABCDEFG,至于这个对象strValue == value进行比较,虽然两个对象的值的相同,但却是不同的对象,内存地址不同,当然会打印false了。然望这样解释你能明白。subString()等方法只是获取相应结果的值而并未改原对象的值
作者:
王禹衡
时间:
2012-10-25 18:34
不是内存问题吧
是方法调用问题
String方法是需要返回值接收的
strValue.substring(3); 没有意义,你可以用String strValue = strValue.substring(3);
作者:
焦晨光
时间:
2012-10-25 20:40
内存示例.jpg
(75.23 KB, 下载次数: 19)
下载附件
2012-10-25 20:40 上传
作者:
HeiMa-黄倲江
时间:
2012-10-25 23:29
值的相同,对象不同,内存地址就不同
所以就打印false,明白吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2