java值传递和引用传递的题目_这题不会!别说你懂值传递与引用传递

即使工作过一阶段的人也不一定能够理解Java是值传递还是引用传递。若不信,那么来看看下面这道题。

题目

请先写出你的答案,然后对比下输出结果。

public class Test {

private String str = new String("码上实战");

private char[] chars = {'星', '期', '一'};

private int num = 2019;

private void change(String cStr, char[] cChars, int cNum) {

cStr = "欢迎关注->码上实战"; //第一步

cChars[2] = '二'; //第二步

cNum = 2020; //第三步

}

public static void main(String[] args) {

Test test = new Test();

test.change(test.str, test.chars, test.num);

System.out.println("str=" + test.str);

System.out.println("chars=" + test.chars[0] + "," + test.chars[1] + "," + test.chars[2]);

System.out.println("num=" + test.num);

}

}

输出结果

str=码上实战

chars=星,期,二

num=2019

值传递还是引用传递?

首先,明确的告诉大家,Java只有值传递,没有引用传递!无论理解不理解,先记住这点。

概念

值传递

方法调用时,实参的数值被复制到另一个变量,然后传递复制的副本。

引用传递

方法调用时,实际参数的地址直接传递到方法中。

对比

-

值传递

引用传递

区别

创建副本

不创建副本

改变

函数中无法改变实际参数

函数中可以改变原始实际参数

注意

这下你看清了吧,值传递和引用传递的真正区别是:传递时,实际参数是否复制了副本! 不要去管参数是基本类型还是引用类型。

解题

为什么char数组中改变了?

因为 实参和形参指向的是同一个数组对象,方法中改变的不是参数本身,而是改变了它所指向的对象。

错误的区分基本类型和引用类型

由题可知,无论是String还是int,即使在方法中都进行改变,但实参都没有改变,所以和参数什么类型没有关系。

如果你有什么问题,欢迎留言交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值