美文网首页
Java中的基本类型与引用类型

Java中的基本类型与引用类型

作者: 寒_蝉 | 来源:发表于2019-04-23 00:01 被阅读0次

定义

在函数传值时,对于基本类型变量,Java是传值的副本;对于所有的引用类型变量,如String等,Java都是传引用的副本。

基本类型

  • 整型:byte,short,int,long
  • 浮点型:float,double
  • 字符型:char
  • 布尔型:boolean

引用类型

  • 数组
  • 接口

实例说明

下面用几个实例来看一看基本类型和引用类型的区别,实例分别尝试在函数中修改不同的入参,验证是否能够通过入参来修改原始值。

函数修改基本类型

代码

基本类型

运行结果

Before Change Value : int = 1
In Change Value : int = 2
After Change Value : int = 1

结果说明

传递基本类型变量时,实际上是将参数值作为一个副本传进方法函数的,在调用的方法函数中,不管怎么改变这个值,其结果都只是改变了副本的值,而不会影响到源值。

函数修改引用类型

代码

引用类型

运行结果

Before Change Value : StringBuffer = Hello
In Change Value : StringBuffer = HelloCicada
After Change Value : StringBuffer = HelloCicada

结果说明

stringBuffer是一个对象引用,Java实际上将它的副本传进方法函数的,这个函数里面的引用副本指向的是对象的地址,通过引用副本找到地址并修改地址中的值,也就改变了对象

函数修改String(面试常考)

代码

String

运行结果

Before Change Value : String = Hello
In Change Value : String = HelloCicada
After Change Value : String = Hello

结果说明

String的API中有这么一句话:Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings.即String类是final类型的,String的值在创建之后不能被更改。所以在执行value += "Cicada"时,其过程为:首先系统会自动生成一个新的String对象,并把这个新对象的值设为HelloCicada",然后把这个对象的引用赋给str。既然对象都是新的,那么就与原来的“Hello”没有任何关系。

执行逻辑

  1. 主函数进栈,string初始化。
  2. 调用changeValue方法,进栈,将string指向的地址值,复制一份给str。
  3. changeValue方法中,重现创建了一个String对象”HelloCicada”,并将str指向了新的地址值。
  4. changeValue方法运行完毕,value所指向的地址值已经改变,但string指向的地址值不变。
  5. changeValue方法弹栈。
  6. 主函数弹栈。

函数交换两个引用(常见误区)

代码

应用类型Swap

运行结果

Before swap:
1
2
In swap:
2
1
After swap:
1
2

结果说明
代码执行结果显示,swap函数并没有像预期的那样交换test1和test2。原因是,调用swap方法时传递的引用并不是引用本身,而是引用的拷贝。所以swap函数只是交换了引用的拷贝,并没有交换原拷贝。

执行逻辑

  1. 主函数进栈,初始化test1、test2。
  2. 调用swap方法,进栈,拷贝test1、test2的地址。
  3. swap方法内交换了test1、test2地址的副本。
  4. swap方法出栈,test1、test2地址的副本被销毁。
  5. 主函数出栈。

总结

  • 一个方法不能修改基本类型参数(实例一);
  • 一个方法可以改变引用类型参数的状态(实例二);
  • 一个方法无法修改String类型的引用,因为String是final(实例三);
  • 一个方法不能让原引用指向一个新引用,因为方法入参传入的是引用副本(实例四)。

相关文章

  • JAVA之引用类型

    java中数据类型分为基本数据类型和引用数据类型。 1、引用数据类型 java中的数据类型分为基本数据类型和引用数...

  • Kotlin基础之字符串

    字符串与其他基本类型的转换 注意:Kotlin中字符串是基本数据类型;在Java中是引用类型的,Java中引用类型...

  • Android NDK 9 JNI 数据类型和方法调用

    一、基本类型 二、引用类型性 JNI 中的引用类型主要包括: 类; 对象; 数组。 和 Java 中的引用类型的对...

  • Java基础知识总结(上)

    Java中的数据类型 Java的数据类型分为两大类:基本类型和引用类型 引用类型:引用类型指向一个对象,不是原始值...

  • Java核心知识点(二)

    Java面向对象基本概念——引用 Java语言中除基本类型之外的变量类型都称之为引用类型 Java中的对象是通过引...

  • Java中对于深拷贝和浅拷贝的理解

    基本类型和引用类型在内存中的保存 Java中数据类型分为两大类:基本类型和对象类型变量也有两种类型:基本类型和引用...

  • Java 基础(一)

    1. Java数据类型 Java 的数据类型分为两种:基本数据类型 和 引用类型。 1)基本类型:Java有8中基...

  • Java入门准备-数据类型及标识符

    数据类型 在Java中,数据类型包括三种:基本类型、引用类型、和一个特殊类型基本类型: 引用类型:类、数组、接口一...

  • Java(一)面向对象--03值传递

    一、基本类型和引用类型的理解 Java中的数据类型分为两种为基本类型和引用类型。 1、基本类型的变量保存原始值,所...

  • 1,值传递和引用传递

    一、基本类型和引用类型的理解 Java中的数据类型分为两种为基本类型和引用类型。 1、基本类型的变量保存原始值,所...

网友评论

      本文标题:Java中的基本类型与引用类型

      本文链接:https://www.haomeiwen.com/subject/svnpgqtx.html