java中的值传递和引用传递

在Java中,对象和基本数据类型的传递方式是不同的。对于对象来说,是引用的传递;而对于基本数据类型来说,是值的传递。

值的传递

String str1 = "hello";
String j = i;
System.out.println(System.identityHashCode(i) + " " + System.identityHashCode(j));
输出:
189568618 189568618

可以看到,赋值之后两个变量的引用地址相同。

j = "MLDN";
System.out.println(System.identityHashCode(i) + " " + System.identityHashCode(j));

可以看到,在修改了j的值之后,对应指向的地址也发生改变,因为此时虽然str2不再为"hello",但str1仍指向此地址空间,所以str2重新指向"MLDN"的地址空间。

18202528_64b684b84f96a45716

引用传递(地址传递)

public static class testclass{
    public int i = 0;
}
public static void main(String[] args){
    testclass t1 = new testclass();
    testclass t2 = t1;
    System.out.println(System.identityHashCode(t1) + " " + System.identityHashCode(t2));
    System.out.println(System.identityHashCode(t1.i) + " " + System.identityHashCode(t2.i));
}
​
输出:
793589513 793589513
159413332 159413332

如上,输出的地址可以看到,t1和t2指向相同的地址空间,他们其中的i也是。

t1.i = 1;
System.out.println(t2.i);
System.out.println(System.identityHashCode(t1) + " " + System.identityHashCode(t2));
System.out.println(System.identityHashCode(t1.i) + " " + System.identityHashCode(t2.i));
输出:
1
793589513 793589513
1028214719 1028214719

如上,对t1的i进行修改之后,t2的i也被修改。t1和t2还是指向同一地址。

在Java中,对象的传递是通过引用来进行的。当你将一个对象作为参数传递给一个方法时,实际上传递的是对象的地址(引用),而不是对象的实际副本。这意味着在方法内部对该对象的修改将影响原始对象。

而基本数据类型(如int, double, char等)的传递是按值传递的,这意味着当你把一个基本类型的值作为参数传递给一个方法时,实际上传递的是这个值的副本,在方法内部对这个值的改变不会影响原始变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值