黑马程序员技术交流社区

标题: 引用变量是对象吗? [打印本页]

作者: 刘忠德    时间: 2012-1-1 20:19
标题: 引用变量是对象吗?
本帖最后由 刘忠德 于 2012-1-2 17:14 编辑

引用变量是对象吗?

还有,String s = "abc"  和 String s = new String("abcd");分别创建了几个对象?
作者: 孙海亮    时间: 2012-1-1 20:51
本帖最后由 孙海亮 于 2012-1-1 20:56 编辑

第一个是创建一个对象“abc”。第二个是创建了2个对象!一个为“abcd”,另一个为"new String()"。
作者: 刘小峰    时间: 2012-1-1 21:07
首先 ,引用变量它只是指向某个对象的一个标示符而已;它本身并非对象;
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");//这儿输出
    }
}

作者: 李盈科    时间: 2012-1-1 21:11
引用是指向对象的。
对于String s = "abc" 来说  要先看以前String池(在栈内存中)是否创建过 “abc” 如果创建过就不创建新对象 直接返回以前的对象。
对于String s = new String("abcd") 先要在字符串池中创建对象,如果以前创建过就不创建 反则创建一个新对象,然后再再堆内存中创建一个新对象,不论以前有没有过内容相同的对象,最后吧对象返回来。
作者: 罗利民    时间: 2012-1-2 17:09
引用变量是一个统称,包括 数组,接口 和 对象
指在栈中创建变量名,放的是一个引用地址,指向在堆里创建的对象

然后
String s = "abc"  和 String s = new String("abcd");分别创建了几个对象  楼上的说的很清楚。




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