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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘忠德 黑马帝   /  2012-1-1 20:19  /  3863 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘忠德 于 2012-1-2 17:14 编辑

引用变量是对象吗?

还有,String s = "abc"  和 String s = new String("abcd");分别创建了几个对象?

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 孙海亮 于 2012-1-1 20:56 编辑

第一个是创建一个对象“abc”。第二个是创建了2个对象!一个为“abcd”,另一个为"new String()"。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
首先 ,引用变量它只是指向某个对象的一个标示符而已;它本身并非对象;
String s = "abc"  和 String s = new String("abcd")你这俩条语句 中用同一个s来指向俩个不同 的对象这是不对的,

下面是关于这个问题的俩个例子,希望可以帮到你
第一个例子:
public class Test {
    public static void main(String args[]) {
        String s1 = new String("Test");    / /这儿创建了一个名为s1的String对象“Test”
        String s2 = new String("Test");   / /这儿又创建了一个名为s2的String对象“Test”
        if (s1 == s2)   //因为s1和s2分别指向俩个不同的对象,所以s1==s2值为false
            System.out.println("Same");//这儿不执行
        if (s1.equals(s2))                       //因为俩个对象内容一样所以  s1.equals(s2)值为true
            System.out.println("Equals");//这儿输出
    }
}

第二个例子:
public class Test {
    public static void main(String args[]) {
        String s1 = "Test";    / /这儿创建了一个名为s1的String对象“Test”
        String s2 = "Test";   / /这儿是让s2也指向String对象“Test”
        if (s1 == s2)   //因为s1和s2指向同一对象,所以s1==s2值为true
            System.out.println("Same");//这儿输出
        if (s1.equals(s2))                       //因为s1和s2指向同一对象,所以  s1.equals(s2)值为true
            System.out.println("Equals");//这儿输出
    }
}

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
引用是指向对象的。
对于String s = "abc" 来说  要先看以前String池(在栈内存中)是否创建过 “abc” 如果创建过就不创建新对象 直接返回以前的对象。
对于String s = new String("abcd") 先要在字符串池中创建对象,如果以前创建过就不创建 反则创建一个新对象,然后再再堆内存中创建一个新对象,不论以前有没有过内容相同的对象,最后吧对象返回来。
回复 使用道具 举报
引用变量是一个统称,包括 数组,接口 和 对象
指在栈中创建变量名,放的是一个引用地址,指向在堆里创建的对象

然后
String s = "abc"  和 String s = new String("abcd");分别创建了几个对象  楼上的说的很清楚。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马