Java数据类型之引用数据类型解读

 更新时间:2023年07月31日 10:59:49   作者:墨末..  
这篇文章主要介绍了Java数据类型之引用数据类型,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java数据类型之引用数据类型

在Java中除了8种基本数据类型外,其他数据类型全部都是引用(reference)数据类型,引用数据类型用来表示复杂数据类型,如下图所示,包含:类、接口和数组声明的数据类型。

引用数据类型:有类,接口,数组等。

Java中的引用数据类型,相当于C等语言中指针(pointer)类型,引用事实上就是指针,是指向一个对象的内存地址。引用数据类型变量中保持的是指向对象的内存地址。

很多资料上提到Java不支持指针,事实上是不支持指针计算,而指针类型还是保留了下来,只是在Java中称为引用数据类型。

int x = 7; 
int y = x; 
String str1 = "Hello"; 
String str2 = str1; 
str2 = "World"; 

上述代码声明了两个基本数据类型(int)和两个引用数据类型(String)。当程序执行完第②行代码后,x值为7,x赋值给y,这时y的值也是7,它们的保持方式如图1所示,x和y两个变量值都是7,但是它们之间是独立的,任何一个变化都不会影响另一个。

当程序执行完第③行时,字符串“Hello”对象被创建,保持到内存地0x12345678中,str1是引用类型变量,它保存的是内存地址0x12345678,这个地址指向“Hello”对象。

当程序执行完第④行时,str1变量内容(0x12345678)被赋值给str2是引用类型变量,这样一来str1和str2保存了相同的内存地址,都指向“Hello”对象。见图1所示,此时str1和str2本质上是引用一个对象,通过任何一个引用都可以修改对象本身。

当程序执行完第⑤行时,字符串“World”对象被创建,保持到内存地址0x23455678中,地址保存到str2变量中,此时,str1和str2不再指向相同内存地址,见图2所示。

图一:引用数据类型赋值过程1

图二:引用数据类型赋值过程2

java理解引用数据类型

一.java中基础数据类型与引用数据类型的区别

1.1基础数据类与引用数据类型介绍

1.基础数据类型:

  • ①整数类型:long、int、short、byte
  • ②浮点类型:float、double
  • ③字符类型:char
  • ④布尔类型:boolean

2.引用数据类型:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型,例:String类型就是引用类型。

1.2存储位置的区别 

  • 基本变量类型

在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的

  • 引用变量类型

只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址

如图:

  • 基本数据类型              

引用数据类型:

 

 

1.3传递方式的区  

  • 基本变量类型

在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递

  • 引用变量类型

引用数据类型变量,调用方法时作为参数是按引用传递的,传递的是引用的副本

 

 二.String判断字符串相等

2.1java中字符串的基本存储原理           

  • 1.常量池中的字符串仅是符号,第一次用到的时候才变为对象           
  • 2.利用串池的机制,来避免重复创建字符串对象           
  • 3.字符串常量拼接原理是StringBuilder(1.8)           
  • 4.可以使用intern方法,主动将串池中还没有的字符串放入串池(1.8是放入,1.6是复制副本放入)

2.2举例

public class ComPareString {    public void test(){        String str1="a";//"a"第一次用到,变为对象        String str2="b";        String str3="a";//判断str1==str3为true,str1与str2指向的都是在串池中的对象"a"        String str4="ab";        String str5="a"+"b";//判断str4==str5为true,str4在编译的过程中就完成了拼接为"ab"                            // ,与上述同理,与str4所指是同一对象        String str6=str1+str2;//判断str4==str6为false,str1与str2为变量,实际上是         //new StringBuilder().append("a").append("b").toString(),即new String("ab")          //新创建了对象,并不是在串池中的"ab",所以为false                                String str7=str6.intern();        //将str6字符串对象放入串池中,如果串池中有就不会放入,如果没有就会放入,最后会把串池中的对象返回        //所以str7现在所指的对象与str4是一样的,str4与str6不相等,故判断str6==str7为false                        String s8=new String("abc");        String s9=s8.intern();//判断s8==s9,如果jdk为1.8则为true,如果jdk为1.6则为false    }}

三.java创建链表错误点

Node h = new Node();
Node n=new Node();
Node n2=h.next;
n2=n;
//奇奇怪怪的错误(捂脸),无论next是null或是非null都不可以这样写,n2=n就是把n的引用赋值给了n2,这样的话n2与h.next就没有任何关系了
//正确写法
n.next=null;
h.next=n;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java基于elasticsearch实现集群管理

    Java基于elasticsearch实现集群管理

    这篇文章主要介绍了java基于elasticsearch实现集群管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式

    MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式

    这篇文章主要介绍了MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java对象序列化与反序列化原理解析

    java对象序列化与反序列化原理解析

    这篇文章主要介绍了java对象序列化与反序列化原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • spring的父子容器及配置详解

    spring的父子容器及配置详解

    本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念、使用场景和用法,有兴趣的可以了解一下
    2018-01-01
  • 深入理解Spring MVC的数据转换

    深入理解Spring MVC的数据转换

    这篇文章主要给大家介绍了关于Spring MVC数据转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2017-09-09
  • springboot读取文件,打成jar包后访问不到的解决

    springboot读取文件,打成jar包后访问不到的解决

    这篇文章主要介绍了springboot读取文件,打成jar包后访问不到的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot配置开发环境的详细步骤(JDK、Maven、IDEA等)

    SpringBoot配置开发环境的详细步骤(JDK、Maven、IDEA等)

    文章介绍了如何配置SpringBoot开发环境,包括安装JDK、Maven和IDEA,并提供了详细的步骤和配置方法,感兴趣的朋友一起看看吧
    2024-12-12
  • Springboot集成graylog及配置过程解析

    Springboot集成graylog及配置过程解析

    这篇文章主要介绍了Springboot集成graylog及配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 利用Java实现读取WPS Excel中嵌入的图片

    利用Java实现读取WPS Excel中嵌入的图片

    许多数据文件中可能包含嵌入式图片,这些图片对于数据分析和可视化非常重要,下面我们就来看看如何使用Java读取WPS Excel中嵌入的图片吧
    2024-11-11
  • Java合并两个List后并去掉重复项的两种做法

    Java合并两个List后并去掉重复项的两种做法

    工作中很多时候需要用到合并两个List并去除其中的重复内容,这是一个很简单的操作,实现的方法也多种多样,这篇文章主要给大家介绍了关于Java合并两个List后并去掉重复项的两种做法,需要的朋友可以参考下
    2023-10-10

最新评论