Java

Java 知识量:11 - 45 - 220

5.1 Java的值><

Java值的分类- 5.1.1 -

Java有许多不同的数据类型,主要分为两大类:基本数据类型和引用数据类型。

基本数据类型(Primitive Types):

  • 整数类型:byte,short,int,long

  • 浮点数类型:float,double

  • 字符类型:char

  • 布尔类型:boolean

引用数据类型(Reference Types):

  • 类(Class)

  • 接口(Interface)

  • 数组(Array)

Java不同数据类型的区别- 5.1.2 -

Java基本数据类型和引用数据类型的区别主要体现在以下几个方面:

  • 存储位置:基本数据类型直接存储在栈中,而引用数据类型存储在堆中,其引用(地址)存储在栈中。

  • 数据操作:基本数据类型是不可变的,一旦创建就不能改变其值。而引用数据类型是可变的,可以修改其引用的对象。

  • 生命周期:基本数据类型的生命周期与变量所在的作用域一致,当变量所在的作用域结束时,基本数据类型就会被销毁。而引用数据类型的生命周期取决于其引用的对象何时被垃圾回收。

  • 赋值操作:基本数据类型的赋值操作是直接将值赋给变量,而引用数据类型的赋值操作是将对象的引用(地址)赋给变量。

  • 比较操作:基本数据类型的比较操作是直接比较其值,而引用数据类型的比较操作是比较其引用的对象是否相同(即比较其地址是否相同)。

引用传递与值传递- 5.1.3 -

引用传递(pass by reference)是一种参数传递方式,在方法调用时,传递的是一个对象的引用(地址),而不是对象本身。这意味着在方法中对传递的引用进行的修改会影响到原始对象。

值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,传递的是一个值的副本,因此在函数中对传递的值进行的修改不会影响到原始值。

在Java中,参数传递是通过值传递实现的。当一个对象作为参数传递给一个方法时,实际上传递的是对象的引用(地址),而不是对象本身。因此,在方法中对对象进行的修改会影响到原始对象。这意味着在方法中修改传递的引用本身(例如将其指向另一个对象)不会影响到原始引用。只有在方法中修改传递的对象的状态时,才会影响到原始对象。

举个例子,假设有一个Person类和一个changeName方法,该方法接受一个Person对象作为参数并修改其name属性。在调用changeName方法后,原始Person对象的name属性也会被修改,因为传递的是Person对象的引用。但是,如果在changeName方法中尝试将传递的Person对象引用指向另一个Person对象,那么原始Person对象不会受到影响,因为传递的是引用的副本。

因此,在Java中,虽然可以通过传递对象的引用来修改对象的状态,但不能通过传递引用来修改引用的本身。