精华内容
下载资源
问答
  • 后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。 为便于...

    初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。
    为便于说明,我们先定义一个简单的类:
    class Vehicle {
    int passengers;
    int fuelcap;
    int mpg;
    }
    有了这个模板,就可以用它来创建对象:
    Vehicle veh1 = new Vehicle();
    通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作。
    1)右边的“new Vehicle”,是以Vehicle类为模板,在堆空间里创建一个Vehicle类对象(也简称为Vehicle对象)。
    2)末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。
    3)左边的“Vehicle veh1”创建了一个Vehicle类引用变量。所谓Vehicle类引用,就是以后可以用来指向Vehicle对象的对象引用。
    4)“=”操作符使对象引用指向刚创建的那个Vehicle对象。
    我们可以把这条语句拆成两部分:
    Vehicle veh1;
    veh1 = new Vehicle();
    效果是一样的。这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。
    在堆空间里创建的实体,与在数据段以及栈空间里创建的实体不同。尽管它们也是确确实实存在的实体,但是,我们看不见,也摸不着。不仅如此,我们仔细研究一下第二句,找找刚创建的对象叫什么名字?有人说,它叫“Vehicle”。不对,“Vehicle”是类(对象的创建模板)的名字。一个Vehicle类可以据此创建出无数个对象,这些对象不可能全叫“Vehicle”。
    对象连名都没有,没法直接访问它。我们只能通过对象引用来间接访问对象。
    为了形象地说明对象、引用及它们之间的关系,可以做一个或许不很妥当的比喻。对象好比是一只很大的气球,大到我们抓不住它。引用变量是一根绳,可以用来系汽球。
    如果只执行了第一条语句,还没执行第二条,此时创建的引用变量veh1还没指向任何一个对象,它的值是null。引用变量可以指向某个对象,或者为null。它是一根绳,一根还没有系上任何一个汽球的绳。执行了第二句后,一只新汽球做出来了,并被系在veh1这根绳上。我们抓住这根绳,就等于抓住了那只汽球。
    再来一句:
    Vehicle veh2;
    就又做了一根绳,还没系上汽球。如果再加一句:
    veh2 = veh1;
    系上了。这里,发生了复制行为。但是,要说明的是,对象本身并没有被复制,被复制的只是对象引用。结果是,veh2也指向了veh1所指向的对象。两根绳系的是同一只汽球。
    如果用下句再创建一个对象:
    veh2 = new Vehicle();
    则引用变量veh2改指向第二个对象。
    从以上叙述再推演下去,我们可以获得以下结论:(1)一个对象引用可以指向0个或1个对象(一根绳子可以不系汽球,也可以系一个汽球);(2)一个对象可以有N个引用指向它(可以有N条绳子系住一个汽球)。
    如果再来下面语句:
    veh1 = veh2;
    按上面的推断,veh1也指向了第二个对象。这个没问题。问题是第一个对象呢?没有一条绳子系住它,它飞了。多数书里说,它被Java的垃圾回收机制回收了。这不确切。正确地说,它已成为垃圾回收机制的处理对象。至于什么时候真正被回收,那要看垃圾回收机制的心情了。
    由此看来,下面的语句应该不合法吧?至少是没用的吧?
    new Vehicle();
    不对。它是合法的,而且可用的。譬如,如果我们仅仅为了打印而生成一个对象,就不需要用引用变量来系住它。最常见的就是打印字符串:
    System.out.println(“I am Java!”);
    字符串对象“I am Java!”在打印后即被丢弃。有人把这种对象称之为临时对象。
    对象与引用的关系将持续到对象回收。但是,关于这一点,打算在下文“简述Java回收机制”再说。

    基本数据类型:可以在栈中直接分配内存;
    引用数据类型:是对象的引用在栈中,对象实际存放在堆中。

    展开全文
  • 返回对象和返回对象的引用区别 Mytime operator*( int t) // 生成临时对象  {  return *this;  }    Mytime & opera

    返回对象和返回对象的引用的区别


    Mytime   operator*(     int   t)        //   生成临时对象
      {  
          return   *this;  
      }  
       
      Mytime   &   operator*(     int   t)   //   不生成临时对象      
      {  
          return   *this;  
       
      }  
    二者的区别就是
    Mytime   operator*(  int   t)     copy了*this到一个temp对象,返回temp对象,然后释放了temp   对象,(或许到以后释放);
    Mytime   &   operator*( int   t)返回的是*this的左值即原局部对象的地址, 这里的this并非指向临时对象,所以是安全的.
    展开全文
  • java中对象和对象的引用区别

    千次阅读 2017-09-25 00:01:32
     这段话来自于《Java编程思想》,很显然,从这段话可以看出对象和对象引用不是一回事,是两个完全不同概念。举个例子,我们通常会用下面这一行代码来创建一个对象:  Person person = new Pe

    在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”

      这段话来自于《Java编程思想》,很显然,从这段话可以看出对象和对象引用不是一回事,是两个完全不同的概念。举个例子,我们通常会用下面这一行代码来创建一个对象:

      Person person = new Person("张三");

      有人会说,这里的person是一个对象,是Person类的一个实例。

      也有人会说,这里的person并不是真正的对象,而是指向所创建的对象的引用。

      到底哪种说法是对的?我们先不急着纠结哪种说法是对的,再看两行代码:

      Person person;

      person = new Person("张三");

      这两行代码实现的功能和上面的一行代码是完全一样的。大家都知道,在Java中new是用来在堆上创建对象用的,如果person是一个对象的话,那么第二行为何还要通过new来创建对象呢?由此可见,person并不是所创建的对象,是什么?上面的一段话说的很清楚,“操纵的标识符实际是指向一个对象的引用”,也就是说person是一个引用,是指向一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person("张三");

      再看一个例子:

      Person person;

      person = new Person("张三");

      person = new Person("李四");

      这里让person先指向了“张三”这个对象,然后又指向了“李四”这个对象。也就是说,Person person,这句话只是声明了一个Person类的引用,它可以指向任何Person类的实例。这个道理就和下面这段代码一样:

      int a;

      a=2;

      a=3;

      这里先声明了一个int类型的变量a,先对a赋值为2,后面又赋值为3.也就是说int类型的变量a,可以让它的值为2,也可以为3,只要是合法的int类型的数值即可。

      也就是说,一个引用可以指向多个对象,而一个对象可不可以被多个引用所指呢?答案当然是可以的。

      比如:

      Person person1 = new Person("张三");

      Person person2 = person1;

      person1和person2都指向了“张三”这个对象。

    展开全文
  • 但是,现在大量的java学习书籍都将对象以及对象的引用混为一谈,然而实际上它们有着本质的区别。为了帮助更多的java学者更好的理解,我将自己的学习理解记录下来。如有理解不全或者错误的地方,欢迎大家批评指正。 ...
    一、前言
           在java学习中,理解对象以及对象的引用是万里长征的第一步。但是,现在大量的java学习书籍都将对象以及对象的引用混为一谈,然而实际上它们有着本质的区别。为了帮助更多的java学者更好的理解,我将自己的学习理解记录下来。如有理解不全或者错误的地方,欢迎大家批评指正。
    二、分析对象引用与对象的区别
           为了接下来进行更好的分析,我先建立一个Demo类,用于后面的分析。
          
    1.  public class Demo{  
    2.     //默认构造方法  
    3.     public Demo{  
    4.     }  
    5. }  
           接下来,我们用Demo类来创建一个对象。
    1. Demo demo=new Demo();  
           这一条语句,其实包括了四个动作:
                    1)右边的“new Demo”,是以Demo类为模板,在堆空间里创建一个Demo对象。
                    2)末尾的()意味着,在对象创建后,立即调用Demo类的构造函数,对刚生成的对象进行初始化。 
                    3)左边的“Demo demo”创建了一个Demo类引用变量,它存放在栈空间中。也就是用来指向Demo对象的对象引用。 
                    4)“=”操作符使对象引用指向刚创建的那个Demo对象。
          
          当然这条语句我们也可以写成:
    1. Demo demo;//创建对象引用  
    2. demo=/*将对象引用指向对象*/new Demo();//创建对象  
          这样显得更加清晰了。

    三、对象引用与对象之间的关系
           1)从对象引用出发:
                 一个对象引用可以指向一个对象        
    1. Demo demo;//一个对象引用  
    2. demo=new Demo();//一个对象引用指向一个对象  
               也可以不指向对象。  
    1. Demo demo;//创建对象引用,但是没有指向对象  

           2)从对象出发:
                 一个对象可以被一个对象引用引用
    1. Demo demo;//创建对象引用  
    2. demo=new Demo();//创建对象,并被一个对象引用指向  
                 也可以被多个对象引用同时引用。
    1. Demo demo1,demo2,demo3;//创建多个对象引用  
    2. demo1=new Demo();  
    3. demo2=demo1;  
    4. demo3=demo2;//创建对象,并被多个对象引用指向  

    展开全文
  • 当返回对象时,C++编译器将调用类默认的拷贝构造函数,...若定义的是返回对象的函数,此处会直接返回对象本身不会再创建一个匿名对象  利用操作符重载的例子加以说明 #include "iostream"using namesp
  • java中对象和引用对象的区别

    千次阅读 2019-09-15 15:49:09
    对象引用,就是得给这个人取个名字来指代他,跟c++指针一样,指向这个人,可以给他一个名字王小明,王小明就是对象引用。我们想到这个人时候就会用王小明去代替他,例如 王小明今天吃了什么,王小明多高,多重...
  • 对象引用和引用的区别

    千次阅读 2017-10-25 13:52:53
    /**对象引用和引用的区别 ,画图就清楚了*/  public static void main(String[] args) {  String str1 = "string interning"; // string literal会被自动”扣留“  String str2 = new String(str1); // 这时...
  • 一、分析对象引用对象的区别 为了接下来进行更好的分析,我先建立一个Demo类,用于后面的分析。 public class Demo{ //默认构造方法 public Demo{ } 接下来,我们用Demo类来创建一个对象。 Demo demo=new ...
  • class tem { int num;...在这里,T1T2是同一个对象的引用,因为当我改变T2的值的时候T1的值也被改变了,同时T的值没有被改变,也就是说此时T2不再是T的对象的引用,及表示一个引用只能指向一个对象
  • Demo demo=new Demo();  这一条语句,其实包括了四个动作:  1)右边“new Demo”,是以... 2)末尾()意味着,在对象创建后,立即调用Demo类构造函数,对刚生成的对象进行初始化。   3)左边“Demo dem...
  • 右边的“new Test”,是以Test类为模板,在堆空间里创建一个Test对象。 末尾的()意味着,在对象创建后,立即调用Test类...也就是用来指向Test对象的对象引用。 “=”操作符使对象引用指向刚创建的那个Test对象。
  • Java变量分为两大类:基本数据类型和引用数据类型。 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量,其他变量都是引用数据类型,如类、接口、数组等。 基本...
  • 简述对象引用和对象的区别

    千次阅读 热门讨论 2015-05-10 22:16:46
    在做机房时候,遇到最多问题就是“未将对象引用添加到对象实例”。每次遇到这样问题,我一直在想:我在类中明明实例化类了,为什么还要出现这样问题?大家先看看我是怎么实例化。  比如:现在有一个类...
  • 后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。  为...
  • 在java的学习当中,很多时候并没有能很好分清把对象和对象的引用。如果没能很好认识分清这两者的关系,就可能会很难理解一些指针的移动的代码。 JAVA中基本类型变量存储在栈中,引用类型的对象存储在栈中,对象的...
  • 创建对象和对象引用区别: 1. 创建对象 new fighterplane(); 此时创建的对象被分配到堆空间中,是类的实例。 2. 创建对象引用 fighterplane fp; 此时创建是对象引用,并没有任何类对象的产生也没有为其分配...
  • 返回对象和返回引用的最主要的区别就是函数原型和函数头。 Car run(const Car &) //返回对象 Car & run(const Car &) //返回引用  返回对象会涉及到生成返回对象的副本。因此...
  • 对象的引用和对象本身的区别: java中没有指针的概念,取而代之的是引用(这个和c++中的引用不是一个意思),这个引用是一个变量而已,存放在栈里面(你可以理解栈和堆是计算机存储器中的不同位置,但是都是用类...
  • 在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用...
  • 后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。 为便于...
  • String book=new String("hadoop"); new String();...book属于一个引用,放在(stack)空间,要操作对象必须通过引用间接操作,以后就是使用book来做文章。 这个地址是指向new Strin...
  • 对象引用与对象的区别  2008-07-23 00:36:07| 分类: java|举报|字号 订阅    下载LOFTER我的照片书...后来才知道,在许多Java书中,把对象和对象的引用
  • http://topic.csdn.net/t/20050310/11/3839506.html ... 两者的处理方式是不同的, 当返回局部对象的值时,会产生一个临时对象,局部对象将值拷贝给该临时对象, 所以当函数
  • java中引用类型的变量和对象的区别

    千次阅读 2017-05-23 09:07:20
    java中引用类型的变量和对象的区别
  • charles_yang 的 指针和对象的区别简单来说,指针是一栋大楼的门牌号码,它的对象是这栋大楼。 程序说明,主要是为程序中用到的变量开内存单元。 程序开头的指针说明干什么呢,也是开内存单元,为的是放门牌号码。...
  • 在传递一个实参给形参时,他们两个是在栈里两个不同变量,只不过都指向同一个对象,就算他们名字一样,可以把他们看成名字不一样两个变量,String 传递是地址引用,String对象一旦建立,它值就不会改变,...
  • 分析对象引用和对象的区别 先闯将一个简单的类,用这个类来分析类的创建过程: public class Person{ public Person{ } } ①new Person 以Person为类模板。在堆中创建一个Person对象。 ②末尾()表示在创建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,715
精华内容 7,086
关键字:

对象和对象的引用区别