A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© up_ 中级黑马   /  2012-10-25 17:52  /  1985 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
你那个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。
               

评分

参与人数 1技术分 +1 收起 理由
张榆 + 1

查看全部评分

回复 使用道具 举报
因为你调用了这个方法之后strValue.substring(3); strValue.concat("123");,没有改变strValue的值,只有当strValue=strValue.substring(3); 这样写是值才会改变,因此result值不变是ABCDEFG,至于这个对象strValue == value进行比较,虽然两个对象的值的相同,但却是不同的对象,内存地址不同,当然会打印false了。然望这样解释你能明白。subString()等方法只是获取相应结果的值而并未改原对象的值

评分

参与人数 1技术分 +1 收起 理由
张榆 + 1

查看全部评分

回复 使用道具 举报
不是内存问题吧
是方法调用问题
String方法是需要返回值接收的
strValue.substring(3); 没有意义,你可以用String strValue =  strValue.substring(3);

评分

参与人数 1技术分 +1 收起 理由
张榆 + 1 不是没有意义,只是没有给它值接收.

查看全部评分

回复 使用道具 举报

评分

参与人数 1技术分 +1 收起 理由
张榆 + 1

查看全部评分

回复 使用道具 举报
值的相同,对象不同,内存地址就不同
所以就打印false,明白吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马