当前位置: 首页 > news >正文

这题不会!别说你懂值传递与引用传递

阅读原文:这题不会!别说你懂值传递与引用传递

即使工作过一阶段的人也不一定能够理解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

相关文章:

  • 换芯 Edge 的新截图曝光,看起来更像 Chrome 了?
  • 如何阅读Java源码?
  • 腾讯云详解宕机故障:光纤挖断后的150秒
  • 【面试准备·3】网络相关
  • Linux基础(第二周)
  • java 企业门户网站 源码 自适应响应式 freemarker 静态引擎 html5 SSM
  • 搭建nonde项目结构
  • 简单封装的ajax请求
  • MySQL学习【第十三篇日志管理】
  • BootStrap基础知识
  • Shiro原理解析(三)--再谈过滤器
  • mysql-python安装时EnvironmentError: mysql_config not found
  • 蚂蚁金服开源服务注册中心 SOFARegistry | SOFA 开源一周年献礼
  • Grafana 6.1.0-beta1 发布,系统指标监控与分析平台
  • HighChart教程:如何使用Highcharts Cloud API(二)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • bearychat的java client
  • go append函数以及写入
  • mongo索引构建
  • PHP CLI应用的调试原理
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Swoft 源码剖析 - 代码自动更新机制
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分享几个不错的工具
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 项目管理碎碎念系列之一:干系人管理
  • const的用法,特别是用在函数前面与后面的区别
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​插件化DPI在商用WIFI中的价值
  • !!java web学习笔记(一到五)
  • #14vue3生成表单并跳转到外部地址的方式
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (12)Hive调优——count distinct去重优化
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十三)Flask之特殊装饰器详解
  • (一)python发送HTTP 请求的两种方式(get和post )
  • ../depcomp: line 571: exec: g++: not found
  • .chm格式文件如何阅读
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 调用php,php 调用.net com组件 --
  • .Net 垃圾回收机制原理(二)
  • .Net 知识杂记
  • .Net各种迷惑命名解释
  • .Net组件程序设计之线程、并发管理(一)