黑马程序员技术交流社区

标题: 关于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


作者: HeiMa-黄倲江    时间: 2012-10-25 23:29
值的相同,对象不同,内存地址就不同
所以就打印false,明白吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2