博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
这题不会!别说你懂值传递与引用传递
阅读量:6230 次
发布时间:2019-06-22

本文共 1196 字,大约阅读时间需要 3 分钟。

即使工作过一阶段的人也不一定能够理解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,即使在方法中都进行改变,但实参都没有改变,所以和参数什么类型没有关系。

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

转载于:https://juejin.im/post/5c9874d3e51d4579e226fbd8

你可能感兴趣的文章
List Se 和Map的区别
查看>>
RTS打卡计划第四周
查看>>
C#_delegate - Pair<T> 静态绑定
查看>>
成都OpenPart——DevOps专场活动参与感
查看>>
Delphi xe6 android Popup控件的使用
查看>>
浅谈linux读写同步机制RCU
查看>>
三层架构设计理念
查看>>
spring的@Transactional
查看>>
java 中生成随机验证码
查看>>
计划任务启动停止控制台程序
查看>>
04-单表查询
查看>>
[ZJOI2006]皇帝的烦恼
查看>>
HTML5简介
查看>>
Read All About It-Attraction舞团
查看>>
[摘录]第1章 开局谈判技巧
查看>>
as 运算符
查看>>
基本数据类型对象包装类
查看>>
1178:成绩排序
查看>>
php总结8——mysql函数库、增删改
查看>>
20170914-构建之法:现代软件工程-阅读笔记
查看>>