对象引用与对象的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lijinshanba/article/details/83586641

先定义一个简单的类:

public class phone{
    int length;   
    int wide;
    double money;
    String color;
}

如果要创建这个类的一个对象,一般的写法是

phone p1 = new phone();

你有没有想过为什么要这么写?等号两边分别表示什么意思?

我们一步步来说:

1. phone p1 表示在栈区创建了一个phone类的引用变量,关键字是引用。

2. new phone() 表示在堆空间创建一个phone类的对象,也就是我们所说的new一个对象,最后的括号表示说通过调用构造函数,对这个对象进行初始化。

3. “=” 操作符表示使得等号左边的引用变量指向等号右边新创建的对象。

       我们可以发现新创建的对象连名字都没有,而新创建的引用变量有自己的名字,所以我们没有办法直接对新创建的对象操作(对象没有名字,就没有标识符,你就没办法写代码标识他)。我们只能让引用变量先去指向对象,我们对引用变量的操作就等同于对对象的操作了。

       参考博客里面把对象比作气球,把引用比作线。我们没办法去摸高空中的气球,但是可以摸到绑着气球的线。一个气球可以有一根或者多跟线,但是一根线在某一个时刻最多只能绑一个气球(或者不绑气球)。

      再看下面的代码:

phone p2;
p2 = p1;

      p2也是一个新的引用变量,他在被创建时并没有被指向哪个对象,因此他的值是NULL。第二行代码中,他被p1赋值,这表示他也指向了p1指向的对象,因此他也可以操作p1的对象。

    如果此时

p2 = new phone()

    那么 p2 就不再指向之类的对象,而是指向新创建的这个对象了。

    同时,如果此时

p1 = p2;

   有没有感觉这是一件很可怕的事情,p1和p2都指向的第二次创建的这个对象,那刚刚第一个创建的对象怎么办???他好惨啊,连名字都没有,好不容易有引用指向他,让我们方便操作他了,现在一下子找不到了??

   恩,是的,找不到了,据说他是被java回收机制给盯上了,可能不会马上回收,但是java有一个机制,会回收了他。

   所以我仔细一想,你写这种代码:

new phone();

    好像没多大意义,不过参考资料里面说:

如果我们仅仅为了打印而生成一个对象,就不需要用引用变量来指向它。最常见的就是打印字符串:

       System.out.println(“I am Java!”);

字符串对象“I am Java!”在打印后即被丢弃。有人把这种对象称之为临时对象。

明白了吧各位大佬。

注:这里多说几句,对象储存在,对象的引用储存在区,基本数据类型储存在区!

参考:https://blog.csdn.net/rosemayzly/article/details/78753131

猜你喜欢

转载自blog.csdn.net/lijinshanba/article/details/83586641
今日推荐