值传递和引用传递

Java中只有值传递

  1. 如果是基础类型如int,是复制了int的值给形参,形参的改变不影响实参。
public static void main(String[] args) {

   int i = 10;
   test(i);
   System.out.println("print in main , i is " + i);
}

public static void test(int j) {
   j = 20;
   System.out.println("print in test, j is " + j);
}

结果:
print in test, j is 20
print in main, i is 10

  1. 如果是引用类型如String,是复制了字符串的引用给形参,直接修改形参也不影响实参
public static void main(String[] args) {
   String name = "Shican";
   test(name);
   System.out.println("print in main , name is " + name);
}

public static void test(String name) {
   name = "Xingcan";
   System.out.println("print in test, name is " + name);
}

结果:
print in test, name is Xingcan
print in main , name is Shican

  1. 如果是引用类型如自定义的类对象,是复制了一份对象的地址给形参,如果直接修改形参则不影响实参
public static void main(String[] args) {
   User shican= new User();
   shican.setName("Shican");
   test(shican);
   System.out.println("print in main , user is " + shican);
}

public static void test(User user) {
   user= new User();
   user.setName("Xingcan");
   System.out.println("print in test , user is " + user);
}

结果:
print in test , user is User{name=‘Xingcan’}
print in main, user is User{name=‘Shican’}

如果通过方法修改形参对象内的域则会影响到实参,但并不代表是引用传递,因为形参的值以及实参的值并没有改变,实际上还是值传递

public static void main(String[] args) {
   User shican= new User();
   shican.setName("Shican");
   shican.setGender("Male");
   test(shican);
   System.out.println("print in main , user is " + shican);
}

public static void test(User user) {
   user.setName("Xingcan");
   System.out.println("print in test , user is " + user);
}

结果:
print in test , user is User{name=‘Xingcan’, gender=‘Male’}
print in main, user is User{name=‘Xingcan’, gender=‘Male’}

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值