JAVA值引用和地址引用

看这道题目,输出结果是0

值引用与地址引用异同:

在Java方法中参数列表有两种类型的参数,基本类型和引用类型。

基本类型:值存放在局部变量表中,无论如何修改只会修改当前栈帧的值,方法执行结束对方法外不会做任何改变;此时需要改变外层的变量,必须返回主动赋值。

引用数据类型:指针存放在局部变量表中,调用方法的时候,副本引用压栈,赋值仅改变副本的引用。但是如果通过操作副本引用的值,修改了引用地址的对象,此时方法以外的引用此地址对象会被修改。(两个引用,同一个地址,任何修改行为2个引用同时生效)。

这两种类型都是将外面的参数变量拷贝一份到局部变量中,基本类型为值拷贝,引用类型就是将引用地址拷贝一份。

像引用数据类型的我们可以直接传递他的实例对象到方法中改变他的值 不用返回,这个实例对象的值也会变,包装类型和基本数据类型不行。

回到该题目:

该题目传递的是包装类Integer,属于引用数据类型,那么为什么最后地址引用改变了,但是值却没变呢?

因为包装类有一个特殊的操作存在,就是拆箱和装箱

所以以后遇到包装类的问题,就可以当成基本数据类型的值传递来解决就行了。

换句话说包装类是引用类型   但是每次重新赋值都相当于赋给了一个新的对象,  所以看起来像是值传递

综上所述:该问题的输出为0,就毫无问题了。

Java中,变量可以分为两类:类型引用类型。它们在内存中的存储方式操作方式有所不同。 1. **类型(Primitive Types)**: - 类型包括基本数据类型,如`int`、`double`、`char`、`boolean`等。 - 类型的变量直接存储数据本身,而不是存储数据的地址。 - 当你创建一个类型的变量时,Java会在栈内存中分配一块空间来存储这个。 ```java int x = 10; double y = 20.5; ``` 2. **引用类型(Reference Types)**: - 引用类型包括类、接口、数组等。 - 引用类型的变量存储的是对象的内存地址,而不是对象本身。 - 当你创建一个引用类型的变量时,Java会在堆内存中分配一块空间来存储对象,而变量本身存储的是对象的引用(即内存地址)。 ```java String str = "Hello"; Object obj = new Object(); ``` 在上述代码中,`str``obj`都是引用类型的变量,它们存储的是字符串对象`Object`对象的内存地址。 ### 示例代码 ```java public class Main { public static void main(String[] args) { // 类型 int x = 10; int y = x; // y是x的一个副本 x = 20; System.out.println("x: " + x); // 输出20 System.out.println("y: " + y); // 输出10 // 引用类型 int[] arr1 = {1, 2, 3}; int[] arr2 = arr1; // arr2arr1引用同一个数组 arr1[0] = 10; System.out.println("arr1[0]: " + arr1[0]); // 输出10 System.out.println("arr2[0]: " + arr2[0]); // 输出10 } } ``` ### 总结 - 类型变量直接存储数据。 - 引用类型变量存储对象的内存地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值