精华内容
下载资源
问答
  • 值引用与对象引用

    2017-04-26 10:10:15
    通过代码简述值引用与对象引用区别
  • java中对象和引用对象区别

    千次阅读 2019-09-15 15:49:09
    什么是对象,什么是对象引用 对象,就是类的一个实例化,把一个抽象不好理解的类举出一个实体来,例如人类是一个类,会吃喝拉撒,实例化出一个小明这个具体的人。 对象引用,就是得给这个人取个名字来指代他,跟c++...

    什么是对象,什么是对象引用

    对象,就是类的一个实例化,把一个抽象不好理解的类举出一个实体来,例如人类是一个类,会吃喝拉撒,实例化出一个小明这个具体的人。 对象引用,就是得给这个人取个名字来指代他,跟c++的指针一样,指向这个人,可以给他一个名字王小明,王小明就是对象引用。我们想到这个人的时候就会用王小明去代替他,例如 王小明今天吃了什么,王小明多高,多重,是这个人的属性,用编程语言就是 print(王小明.身高)
    那么在内存上有什么区别呢,当我 用人这个类实例化出王小明时,电脑是这样识别的 (人 王小明),王小明=new 人(185,60),先给出一个对象引用,此时王小明这个代号可以指向任何人,你也可以叫王小明,他也可以,然后我实例化出一个人,我把王小明这个代号指向了这个人,这个人的内存是在堆内存里的,而王小明这个对象引用是在栈内存里的,

    栈和堆有什么区别呢

    参考文章十分详细介绍了
    https://blog.csdn.net/abcjennifer/article/details/39780819

    1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等
    2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。
    除了这两部分,还有一部分是:3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
    明显,一个人可以拥有很多名字,小名绰号艺名笔名,我们可以用周树人去指代这个对象,也可以用鲁迅去指代这个对象,甚至可以用迅哥儿去指代,也就是说一个对象可以拥有很多个对象引用

    注:这里这个文章讲一个引用可以指向多个对象,我不是很理解和赞同https://blog.csdn.net/weixin_43343890/article/details/100740707
    在这里插入图片描述然后,就会有一个问题了,能不能有一个类我们只需要一个对象呢,例如人这个类,我写他的时候,我能不能只想要王小明这一个人,别人再创建时无论创建多少个对象引用都只能指向我这个一个对象,

    单例模式可以满足这样的需求

    具体可以看这篇文章
    https://blog.csdn.net/yangshangwei/article/details/50198821

    c++和java在创建对象时有什么区别呢

    我好像没有看到java里有 delete这个方法,java会自动清理内存。具体咋个自动法,我还需要深入学习,而c++就有这个方法,free和delete 这是一个区别,
    在这里插入图片描述
    未完待续

    展开全文
  • 刚刚接触Java时应该听说过一...对于对象引用,心里大概知道,却不知怎么表达。还有一个问题就是Java是值传递还是引用传递,在C语言中这个问题看到的比较多,在Java中似乎没怎么探讨过。下面围绕上面两个问题来分析!

        刚刚接触Java时应该听说过一句“万物皆对象”,《Java编程思想》一书中也描述对象“将对象视为奇特的变量,它可以存储数据,除此之外,还可以要求它在自身上执行操作。理论上讲,可以抽象待求解问题的任何概念化构件,将其表示为程序中的对象”。对于对象的引用,心里大概知道,却不知怎么表达。还有一个问题就是Java是值传递还是引用传递,在C语言中这个问题看到的比较多,在Java中似乎没怎么探讨过。下面围绕上面两个问题来分析!

     

    *什么是对象引用?

        在C语言中指针是重点亦是难点,到现在还是觉得指针是一个高深的东西,因为它可以直接操作内存,简单地说,指针可以指向一个物理地址,然后操作这一块内存。在Java中的对象的引用和C、C++中的指针是比较像的,不过也只是比较像而已,有人觉得Java中的对象就是一个指针,但事实上,Java中的对象引用和C++中的引用在语法上更加接近,不过两者也存在很大差别。第一版的《Java编程思想》把Java中的对象引用叫做“句柄”,不过我们现在更习惯用“引用”。

         对于Java中的对象引用的解释可以用《Java编程思想》的一段话解释,“每种编程语言都有自己的数据处理方式,有些时候,程序员必须注意将这些要处理的数据是什么类型。你是直接操作元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在Java中得到了简化,一却都被视为对象。因此,我们可以采用一种统一的语法。尽管一切都被视为对象,但操作的标识符实际是指向一个对象的‘引用’ ”。

    再举一个这本书中有关对象个对象引用的例子:

        对象和对象引用就好比电视机和遥控器,对象是电视机,对象引用是遥控器,即遥控器用来控制电视机,遥控器和电视是关联起来的,我们要控制电视,只需要一个遥控器即可。若有String s; ,这里的s创建了一个字符串引用,就相当于有了一个遥控器,可是没有电视机,可是记得吗,还有万能遥控器,,不过在配对之前,万能遥控器是不与任何一台电视机相关联的,当配对成功之后它就与特定的电视机产生了管理,所以说这个s其实现在还是一个还没有指向任何字符串对象的字符串引用,当我们通过new的方式创建了一个字符串对象,其实就相当于给这个引用关联了一个对象,这个引用关联了一个对象,这个引用就指向了这个对象。

     

    弄清楚了Java中的引用,下面补充一段关于String和StringBuffer的例子:

    public static void main(String[] args) {
        String s1 = new String("hello String!");
        String s2 = s1;
        s2 = "你好 String!";
    
        StringBuffer s3 = new StringBuffer("hello");
        StringBuffer s4 = s3;
        s4.append(" StringBuffer!");
    
        System.out.println("s1: "+s1);   //s1: hello String!
        System.out.println("s2: "+s2);   //s2: 你好 String!
        System.out.println("s3: "+s3);   //s3: hello StringBuffer!
        System.out.println("s4: "+s4);   //s4: hello StringBuffer!
    }
    

    之前总结过:String一旦创建就不会再改变,上述代码中,之前s1和s2指向的是同一个对象,但是当是s2重新赋值的话,所指向的对象就变了,这点对于StringBuffer不同,因为它创建的字符串存在缓冲流,所以s3和s4一开始指向的是同一个对象,然后s4改变了这个对象,这个时候其实s3和s4指向的还是同一个对象,所以内容也是相同的。这里记住一个很重要的知识点——

        如果两个引用指向同一个对象,不管哪个引用去改变这个对象,其结果是对象的内容都会发生改变,而且只有一个对象,但是String是一个特例!

     

    *Java中是值传递还是还是引用传递?

        首先,答案是值传递,属于基础知识,却往往被我们忽视。对于Java中的传递方式必须要深刻理解什么是值,什么是引用,刚好上面我们分析了什么是对象的引用。下面还是来看一个例子:

    public static void main(String[] args) {
            String str = "hello";
            setString(str);
            System.out.println(str);  //hello
        }
        public static void setString(String str) {
            str = str + "String";
        }

        在这个例子中,不要被setString()方法中的str迷惑了,这个str和main方法中的str是不一样的,先不谈值传递和引用传递,我们知道String一旦创建是不可变的,所以这里的str是不会变的。实际上是setString()中的这个str指向了新创建的字符串对象“hello String”。

     

        对于Java中的传参我们可以分为基础类型和引用类型,但两者传参方式都是值传递,对于基础数据类型传参方式是值传递是比较好理解的,重点在于引用类型。还是一个例子:

    Integer a = new Integer(1);
    Integer b = a;
    b++ ;
    System.out.println("a="+a+"\t b="+b);  //a=1	 b=2

        这个例子再次说明Java的引用类型是值传递方式传参的,因为a的值没有随着b的改变同时改变。引用类型中的值传递中“值”指的是什么呢?这里的值其实就是引用所存储的对象的地址值,其实b是a的一个复制品,这个b是独立存在的一个引用,在没有将a复制给它的时候,她还是一个空引用,谁也不指向,但是当a复制给它后,就相当于b存储了和a一样的地址,都指向同一个对象,如图1,但是一旦b自增就相当于Integer b = new Integer(2);,就变成了图2,即b引用的地址就变了。

          所以Java中传参的方式只有一种,那就是值传递,另外,我们知道对于引用都是存在栈中的,而实际的对象是存在堆中的,栈中的引用存放了可以指向实际对象的地址,而引用数据类型的传参,传的就是这个地址!

     

    展开全文
  • 对象引用与对象存放的地址和区别

    千次阅读 2020-04-17 00:15:08
    在java的学习当中,很多时候并没有能很好分清把对象和对象引用。如果没能很好认识分清这两者的关系,就可能会很难理解一些指针的移动的代码。 JAVA中基本类型变量存储在栈中,引用类型的对象存储在栈中,对象的...

    在java的学习当中,很多时候并没有能很好分清把对象和对象的引用。如果没能很好认识分清这两者的关系,就可能会很难理解一些指针的移动的代码。

    JAVA中基本类型变量存储在栈中,引用类型的对象存储在栈中,对象的引用地址存储在堆中。

    我们先定义一个简单的类:

    public class DemoClass {
        private String name;
    }
    

    有了这个模板,就可以用它来创建对象:
    DemoClass demo= new DemoClass ();
    通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作。
    1)右边的“ new DemoClass”,是以DemoClass类为模板,在堆空间里创建一个DemoClass类对象(也简称为DemoClass对象)。
    2)末尾的()意味着,在对象创建后,立即调用DemoClass类的构造函数,对刚生成的对象进行初始化。
    3)左边的“DemoClass”创建了一个DemoClass类引用变量。所谓DemoClass类引用,就是以后可以用来指向DemoClass对象的对象引用。
    4)“=”操作符使对象引用指向刚创建的那个DemoClass对象。
    我们可以把这条语句拆成两部分:
    DemoClass demo; --对象引用变量
    demo= new DemoClass (); --对象本身
    效果是一样的。这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。

    通过上面知识我们来看两个相对复杂一点demo,这个例子中通过tempHead 改变对实体对象指向的改变,使其tempHead 一直指向链表的末尾。head 指向链表头部

    public class TempClass {
    
        @Test
       public void replaceSingleNode(){
            //定义一个请求头对象
           SingleLinkedNode head = new SingleLinkedNode(0);
           //定义tempHead的引用名 将指向  new SingleLinkedNode(0) 这个对象本身
           SingleLinkedNode tempHead=head;
           for (int i = 1; i <=5 ; i++) {
               //tempHead.next 引用名  将指向 new SingleLinkedNode(i)本身
               tempHead.next = new SingleLinkedNode(i);
               //tempHead引用名  指向  tempHead 的下个对象本身
               tempHead = tempHead.next;
           }
           //这个时候head 这个引用名 实际指向  new SingleLinkedNode(0);
           System.out.println("请求头:"+head);
           //这个时候 tempHead 这个应用名实际指向  new SingleLinkedNode(i); 当i=5的时候
           System.out.println("运输对象:"+tempHead);
       }
    
    
        @Data
        class SingleLinkedNode{
            private int value;
            private SingleLinkedNode next;
    
            public SingleLinkedNode(int value) {
                this.value = value;
            }
    
        }
    
    
    
    
    
    }
    
    

    打印内容

    请求头:TempClass.SingleLinkedNode(value=0, next=TempClass.SingleLinkedNode(value=1, next=TempClass.SingleLinkedNode(value=2, next=TempClass.SingleLinkedNode(value=3, next=TempClass.SingleLinkedNode(value=4, next=TempClass.SingleLinkedNode(value=5, next=null))))))
    运输对象:TempClass.SingleLinkedNode(value=5, next=null)
    

    我们的出 tempHead = tempHead.next; 只是改变tempHead 这个引用对象,而不是直接对对象进行替换,我这里再用一个双链表来作证这一结论。在双链表中如果是不是覆盖,那最后tempHead就应该保留整条链表数据,只是tempHead指向链表末尾的字段。

    public class TempClass {
    
        
        @Test
        public void replaceDoubleNode(){
            //定义一个请求头对象
            DoubleLinkedNode head = new DoubleLinkedNode(0);
            //定义tempHead的引用名 将指向  new SingleLinkedNode(0) 这个对象本身
            DoubleLinkedNode tempHead=head;
            for (int i = 1; i <=5 ; i++) {
                //newNode 引用名  将指向 new SingleLinkedNode(i)实体本身
                DoubleLinkedNode newNode = new DoubleLinkedNode(i);
                //tempHead.tail 这个引用 指向new DoubleLinkedNode(i);实体
                tempHead.tail =newNode;
                //newNode 这个引用 指向tempHead 的实体
                newNode.front = tempHead;
                //将tempHead 指向  tempHead.tail 实体 ,也就是 new DoubleLinkedNode(i) 实体本身
                tempHead = tempHead.tail;
            }
            System.out.println("请求头:"+head);
            System.out.println("运输对象:"+tempHead);
        }
    
    
    
    
    
    
    
        class DoubleLinkedNode{
            private int value;
            private DoubleLinkedNode front;
            private DoubleLinkedNode tail;
    
            public DoubleLinkedNode(int value) {
                this.value = value;
            }
        }
    }
    
    

    在这里插入图片描述

    希望通过这里讲解说明,能够很好的认识引用和对象本身的区别

    展开全文
  • 一、分析对象引用与对象的区别 为了接下来进行更好的分析,我先建立一个Demo类,用于后面的分析。 public class Demo{ //默认构造方法 public Demo{ } 接下来,我们用Demo类来创建一个对象。 Demo demo=new ...

    一、分析对象引用与对象的区别

    为了接下来进行更好的分析,我先建立一个Demo类,用于后面的分析。

     public class Demo{
        //默认构造方法
        public Demo{
        }
    

    接下来,我们用Demo类来创建一个对象。

    Demo demo=new Demo();
    

    这一条语句,其实包括了四个动作:
    1)右边的“new Demo”,是以Demo类为模板,在堆空间里创建一个Demo对象。
    2)末尾的()意味着,在对象创建后,立即调用Demo类的构造函数,对刚生成的对象进行初始化。
    3)左边的“Demo demo”创建了一个Demo类引用变量,它存放在栈空间中。也就是用来指向Demo对象的对象引用。
    4)“=”操作符使对象引用指向刚创建的那个Demo对象。

    当然这条语句我们也可以写成:

    Demo demo;//创建对象引用
    demo=/*将对象引用指向对象*/new Demo();//创建对象
    

    这样显得更加清晰了。
    在这里插入图片描述

    二、对象引用与对象之间的关系

       1)从对象引用出发:
             一个对象引用可以指向一个对象 
    
    Demo demo;//一个对象引用
    demo=new Demo();//一个对象引用指向一个对象
    

    也可以被多个对象引用同时引用。

    Demo demo1,demo2,demo3;//创建多个对象引用
    demo1=new Demo();
    demo2=demo1;
    demo3=demo2;//创建对象,并被多个对象引用指向
    

    这样一看就一目了然了。
    **
    原文作者链接   https://blog.csdn.net/qq_26805137/article/details/52945688**

    展开全文
  • 对象引用和对象本身的区别: java中没有指针的概念,取而代之的是引用(这个c++中的引用不是一个意思),这个引用是一个变量而已,存放在栈里面(你可以理解栈堆是计算机存储器中的不同位置,但是都是用类...
  • JAVA实例对象 和引用变量的区别:

    千次阅读 2019-05-20 22:01:11
    Object obj1=new String ("123); Object obj2=obj1; obj1创建了一个新的空间这样就使其实例化了,变成了一个字符串实例对象 ,而obj2 只是指向了obj1 所指向的对象.
  • 对象和对象引用

    千次阅读 多人点赞 2018-06-02 01:41:28
    最近初学java对于对象和对象引用以及实例化有诸多迷惑,查了很多博客API,现整理自己的理解如下:Java是一种面向对象的语言,采用类和对象的概念。Java中每个对象都有一种类型,即对象所属的类。类有两个主要...
  • 对象引用和值引用的区别

    千次阅读 2017-10-25 13:52:53
    /**对象引用和值引用的区别 ,画图就清楚了*/  public static void main(String[] args) {  String str1 = "string interning"; // string literal会被自动”扣留“  String str2 = new String(str1); // 这时...
  • java中对象和对象引用区别

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

    千次阅读 2018-12-11 10:09:03
    引用对象是在你程序代码一些称为被引用者的对象之间的中间层。每个引用对象都是围绕它的被引用者创建,并且被引用者是不能修改的。 引用对象提供了 get() 方法来获取被引用者的强引用。垃圾回收器可能在某些...
  • 引用和对象的关系

    千次阅读 2018-07-24 15:35:52
    java的引用和对象的关系。 例如下面这句代码 String str = new String("abc"); 引用是:str 对象是 :new String(“abc”); java中new出来的对象存储在堆里,而str的值,就是str所引用的new String...
  • Java对象和引用变量

    万次阅读 多人点赞 2016-08-31 00:45:30
    对于引用变量的深层含义,未必在初学的时候就能深刻理解, 所以理解好下面这两句话的真正含义非常重要Case cc=new Case();... 基本类型的变量和对象引用变量 存取速度比堆要快,仅次于寄存器,栈
  • 对象引用对象

    千次阅读 2014-06-03 22:16:43
    概念介绍 对象与对象引用
  • 函数返回对象与对象引用区别

    千次阅读 2019-01-10 14:58:23
    返回对象和返回引用的最主要的区别就是函数原型函数头。 Car run(const Car &amp;) //返回对象 Car &amp; run(const Car &amp;) //返回引用 返回对象会涉及到生成返回对象的副本,这事调用函数的程序...
  • 下面将介绍python的对象引用和 del删除引用1. 首先介绍下python的对象引用1)Python中不存在传值调用,一切传递的都是对象引用,也可以认为是传址调用。即Python不允许程序员选择采用传值或传引用。Python参数传递...
  • 什么是Java的对象引用? Java中都有哪些类型的对象引用? Java中提供的Java对象引用主要有什么目的? 通过本文,你就能很清楚得了解Java的对象引用
  • java中引用类型的变量和对象区别

    千次阅读 2017-05-23 09:07:20
    java中引用类型的变量和对象区别
  • 当返回对象时,C++编译器将调用类默认的拷贝构造函数,将对象赋值给一个匿名对象并将其扔出去 这个类似于拷贝构造函数的第四种方法,此时如果外面没有同一个类型的对象将其接住,就会直接析构掉。 若定义的是...
  • 引用拷贝:对象拷贝的不同之处在于,引用拷贝只会生成一个新的对象引用地址,但两个地址其最终指向的还是同一个对象; 对象拷贝:这种方式会重新生成一个新的对象,生成的新对象与原来的对象没有任何关联。 1、...
  • 深入JVM对象引用

    万次阅读 多人点赞 2015-11-17 12:19:31
    在jdk 1.2以前,创建的对象只有处在可触及(reachaable)状态下,才能被程序所以使用,垃圾回收器一旦发现无用对象,便会对其进行回收。但是,在某些情况下,我们希望有些对象不需要立刻回收或者说从全局的角度来说...
  • 吃人的那些 Java 名词:对象引用、堆、栈

    万次阅读 多人点赞 2019-09-05 15:57:09
    作为一个有着 8 年 Java 编程经验的 IT 老兵,说起来很惭愧,我被 Java 当中的四五个名词一直困扰着:**对象引用、堆、栈、堆栈**(栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都隐隐...
  • 今天做的一个项目,需要把一个JSON数据对象,保存下来。 具体是我需要做三个JSON对象 一个叫oldPageProducts 一个叫newPageProducts 还有一个是self.pageProducts.productsData(这个是一个全局对象) 第1...
  • 对象引用和清除_Java语言程

    千次阅读 2021-03-17 15:54:13
    对象引用和清除_Java语言程4.3.3 对象引用和清除在创建了类的对象后,就可以使用对象。即对象使用的原则是“先创建后使用”。使用对象的方法是:通过运算符“.”访问对象的各个成员变量成员方法,进行各种...
  • 对于刚接触不久面向对象的真小白童鞋来说,类的对象对象的实例,对象引用引用变量的问题以及莫过于没得对象虽然博主也没得对象,本文将逐个逐个讲解! 1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆...
  • Java中对象和引用的理解

    千次阅读 2017-08-03 18:41:08
    一、对象和引用的概念: 在Java中万物皆对象,比如我们定义一个简单的动物类:class Animal { String count; String weight; .... }有了这个Animal类之后,我们可以来创建一个Animal对象:Animal an = new ...
  • Java中对象的赋值与引用

    万次阅读 多人点赞 2017-07-28 19:52:34
    Java中对象的赋值与引用详解
  • 声明对象和实例化对象区别

    千次阅读 2019-05-31 20:40:45
    声明一个变量,并不会分配一个完整的对象所需要的内存空间,只是将对象名所代表的变量看成是一个引用变量,并为它分配所需内存空间,它所占用的空间远远小于一个类的对象所需要的空间。 如此处理,使得Java中声明一...
  • Java数组属于引用类型对象,以此为例说明地址引用和内容复制的区别 1.地址引用 为一个数组变量赋值另一个数组变量后,2个数组变量指向同一个内存地址,引用同一个数组对象,此时内存中并没有建立新的数组对象。 2....
  • java对象创建与引用变量的详解

    千次阅读 2020-04-13 16:26:24
    创建对象引用变量创建对象基本类型变量和引用类型变量的区别存储的值赋值引用数据NULL 创建对象 ClassName objectRefVar = new ClassName(); 这条语句包含了三个部分: 创建对象 ——new ClassName(); 用new...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,234,070
精华内容 893,628
关键字:

对象和对象的引用区别