一、java中方法参数传递方式是本质上都是“值”传递

如果参数是基本类型(传“实际值”):

由于栈中存的就是“实际值”(java基本类型的值存储在栈中,不在堆中),所以传递的是基本类型的“实际值”的拷贝。

如果参数是引用类型(传“地址值”):

由于栈中存的是地址(该地址指向堆内存中存储位置,即引用),所以传递的是“堆中的地址”的拷贝。所以我们说成是“引用(址)传递”。

注意:
1. “String和8大基本类型的包装类”是不可变类型,即特殊的引用类型,所以每次修改操作都是新创建的对象,栈中的地址不断更换,所以出现了不能修改值的效果,让大家误以为是值传递了。
2. 而一般对我们自己创建的类进行修改操作,就会顺着引用的地址“找到并修改掉”原来的值,所以达到了引用传递的效果。

二、补充:

String与8种基本数据类型的包装类

8种基本数据类型采用值传递,其包装类型与String与其他我们手写的类都是引用传递只是由于String和8种包装类型都是不可变类,所以每次操作都是新创一个对象并重新赋给引用;在函数调用的时候,如果形参是String或者8种包装类型,操作形参不会影响实参,操作形参相当于重新创建对象不会影响原实参。

可变与不可变

不可变:
String8种包装类型、BigInteger、BigDecimal是不可变类,不可变的意思是每次更换值都会重新生成对象并赋给引用。不用考虑线程安全。我们也可以设计自己的不可变类。

可变:
其他我们手写的实体类一般都是可变类。


参考:Java 到底是值传递还是引用传递? - 知乎

JAVA不可变类与可变类、值传递与引用传递深入理解 - QiaoZhi - 博客园

java 值传递与址(引用)传递相关推荐

  1. [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递

    参考链接: 用Java传递和返回对象 看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型  值传递:引用类型,地址值传递,所 ...

  2. 值传递,还是引用传递(实践是检验真理的唯一标准)

    package com.c9;import java.util.ArrayList;//值传递,还是引用传递? /* 1, list,保持一致:有效2,实体bean,保持一致,有效3, string, ...

  3. qt槽函数如何传递多个参数_【Qt】信号和槽对值传递参数和引用传递参数的总结...

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  4. 天真,居然还有人认为java的参数传递方式是引用传递

    代码写的越急,程序跑得越慢.-- Roy Carlson 时间过得真快,2020已经过去了一半,但是疫情好像还没有真正的消灭,人们出行还是得带着口罩,天气越来越热,受罪啊. 言归正传,都2020年了, ...

  5. 【Qt】信号和槽对值传递参数和引用传递参数的总结

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  6. 递归中的引用传递和常引用传递

    通过递归加深引用传递和常引用传递的区别,同时加深递归回溯的过程 void process(string& str) {if (str.size() >= 5) {cout << ...

  7. java还值_Java到底是引用传递还是值传递

    前言 前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢? public void test(){ String str = "hello"; change(str); S ...

  8. Java 函数传递对象是引用传递还是值传递?

    class A {int val; }public class main {public static void fun(A a, A b) {// a.val = 6;a = b;}public s ...

  9. Java里的按值传递与引用传递

    按值传递还是按引用传递 这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:"在Java里面参数传递都是按值传递".事实上,这很容易让人迷惑,下面先分别 ...

  10. Java基础中按值传递和引用传递详解

    下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: [java] view plaincopy ...

最新文章

  1. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
  2. libevent-signal(2)
  3. 如何修改路由器和交换机的密码
  4. javascript基础语法——词法结构
  5. ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始
  6. navicat连接oracle 报 ORA-12737 set CHS16GBK
  7. ACM算法 -- 数论 -- 开灯关灯问题(数论,整数分解,因子个数,公式推导)
  8. asp.net文件上传进度条控件(破解版~没有时间限制) 多项自定义
  9. 大型K8s沙龙来啦,火速报名——Kubernetes Cloud Native Meetup
  10. sql server内置存储过程、查看系统信息
  11. java contains_Java开发人员犯的十大错误,你犯几个?
  12. mysql 5.5 双机热备_mysql 5.5双机热备份 master-master
  13. C++编程语言中整型转换为字符串类型的方法
  14. 银保监会发函!股份制银行助贷、联合贷业务红线划定!
  15. Redis--集群-Cluster-真正的/终极版的集群
  16. 转:『诡异的』VL10B创建外向交货单出错解决全过程
  17. VS2019报错“常量中有换行符”及中文乱码问题解决
  18. 【渝粤教育】国家开放大学2018年春季 8644-21T汽车电子商务 参考试题
  19. android女孩名字的由来,诗经中的女孩灵动名字 寓意深刻而又唯美
  20. ProxyCap +ccproxy 组合使用Socks5 实现代理服务器

热门文章

  1. 图像旋转(C语言实现)
  2. onlyoffice 自动保存_leaf-onlyoffice
  3. php7.2.10+mysql+Ptcms源码调试
  4. LG-FedAvg略读
  5. 使用 Rust 语言开发 Erlang NIF
  6. 5018软件项目管理
  7. 2018年第20周(2018-5-18)周末总结
  8. RK3399驱动开发 | 12 - AP6255 SDIO WiFi 调试(基于linux4.4.194内核)
  9. Linux为文件夹及其子文件赋权限
  10. Windows优化维护瑞士军刀Glary Utilities Pro绿色版