java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

Java中对象和对象引用的区别,引用、指向理解

Java中对象和对象引用的区别,引用、指向是什么意思

new Person(); //一个对象
Person p1 = new Person();//p1 是一个对象的引用 P1指向那个对象new Person()

Java的变量分为两大类:基本数据类型和引用数据类型。
其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量,其他变量都是引用数据类型,如类、接口、数组等。

基本数据类型,只有一块存储空间, 在栈中,存放的是具体数据值。比如 int a = 10;

引用数据类型,有两块存储空间一个在栈(Stack)中,一个在堆(heap)中。堆中存放对象实体(使用new关键字,即表示在堆中开辟一块新的存储空间),栈中存放对象在堆中所在位置的首地址。引用类型变量类似于C/C++中的指针。

引用: 一个引用类型变量(栈中的一块内存空间)保存了一个该类型对象在堆中所在位置的首地址,也称作一个引用类型变量指向了一个该类型的对象,通过这个变量就可以操作对象中的数据。

看下面一段代码:

class Person {
    String name;
    int age;
}

public class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "张伟";
        p1.age = 17;
        System.out.println("姓名:" + p1.name + ",年龄:" + p1.age);

        Person p2 = new Person();
        p2.name = "李丽";
        p2.age = 12;
        System.out.println("姓名:" + p2.name + ",年龄:" + p2.age);

        p1 = p2;
        p1.age = 13;
        System.out.println("姓名:" + p1.name + ",年龄:" + p1.age); //姓名:李丽,年龄:13
        System.out.println("姓名:" + p2.name + ",年龄:" + p2.age); //姓名:李丽,年龄:13
    }

}

java PersonTest
姓名:张伟,年龄:17
姓名:李丽,年龄:12
姓名:李丽,年龄:13
姓名:李丽,年龄:13

Person类对象的内存图:


多个对象在堆内存中,都有不同的内存划分

当多个对象的引用指向堆同一块内存空间(p1 = p2; 即将一个对象的引用赋值给另一个变量,两个变量所记录的地址值是一样的,此时p1指向 p2所指向的对象,不再指向 p1原本指向的对象,如上图所示),只要通过任何一个对象引用修改了对象中的数据,随后,无论使用哪一个对象引用获取数据,得到的都是修改后的值,因此,最后两行打印语句的结果是一样的。

所以,对于引用数据类型,如 Person p = new Person(); 将 p 简单理解为对象名是不合适的。

https://www.cnblogs.com/sun10367/p/13490359.html


This entry was posted in JAVA and tagged , , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/java-stack-object/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply