Java传参都是传引用变量的副本
最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值。
1 Java中的引用变量

而如果其中一个引用改变指向的值,另一个引用不改变。如下图:

故引用并不能修改对象值,如果其中一个引用“修改对象值”,它只是修改其指向的对象,另一个引用不改变。


2 实验验证
class Test {
int intInObj;
String strInObj;
Integer integerInObj;
public Test(int intInObj, String strInObj, Integer integerInObj){
this.intInObj = intInObj;
this.strInObj = strInObj;
this.integerInObj = integerInObj;
}
}
public class SendValue{
public static void main(String[] args) {
// 测试1:传int
int testInt = 1;
SendValue.change(testInt);
System.out.println(testInt);
// 测试2:传String
String testString = "1";
SendValue.change(testString);
System.out.println(testString);
// 测试3:传Integer
Integer testInteger = 1;
SendValue.change(testInteger);
System.out.println(testInteger);
// 测试4:传对象
Test testObject = new Test(1, "1", 1);
SendValue.change(testObject); // 形参修改原对象内的值
System.out.println(testObject.intInObj);
System.out.println(testObject.strInObj);
System.out.println(testObject.integerInObj);
// 测试5:传对象
SendValue.changeObject(testObject); // 形参改变指向的对象
System.out.println(testObject.intInObj);
System.out.println(testObject.strInObj);
System.out.println(testObject.integerInObj);
}
public static void change(int i) {
i = 10;
}
public static void change(String str) {
str = "10";
}
public static void change(Integer i) {
i = 10;
}
public static void change(Test test) {
test.intInObj = 10;
test.strInObj = "10";
test.integerInObj = 10;
}
public static void changeObject(Test test) {
test = new Test(100, "100", 100);
}
}
获得结果如下:

画图解释测试4和测试5:



Java传参都是传引用变量的副本的更多相关文章
- vue初始化、数据处理、组件传参、路由传参、全局定义CSS与JS、组件生命周期
目录 项目初始化 组件数据局部化处理 子组件 父组件 路由逻辑跳转 案例 组件传参 父传子 子组件 父组件 子传父 子组件 父组件 组件的生命周期钩子 路由传参 第一种 配置:router/index ...
- SpringCloud:feign对象传参和普通传参及遇到的坑
对象传参: #使用@RequestBody来指定传参对象 @RequestMapping(value = "/v2/matterCode/genCode", method = Re ...
- Apache ab测试工具使用方法(无参、get传参、post传参)(转)
转自Apache ab测试工具使用方法(无参.get传参.post传参) Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包, ...
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
- String的按值传递,java传参都是传值
java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? String和int参数传递是按值传递还是引用传递? 一道面试题目,String的传递: public String change( ...
- Java传参-基本数据类型和引用数据类型作为参数的区别(值传递)
java中的方法可以传递参数,参数的传递方法就是值传递. 参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参. 调用方法时,会把实参传递给形参,方法内部其实是在使用形参. 所 ...
- Postman 串行传参和动态传参详解
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...
- Postman高级应用——串行传参和动态传参详解
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...
- Apache ab测试工具使用方法(无参、get传参、post传参)
Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包,我下的最新版本apache2.4.23,下载地址http://httpd. ...
随机推荐
- 270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
[抄题]: Given a non-empty binary search tree and a target value, find the value in the BST that is clo ...
- 手动编译cloudfoundry
1.下载cloudfoundry源代码 git clone 2.BOSH的官方定义 BOSH是一个针对大规模分布式系统的部署和生命周期管理的开源工具,其基础是"a tool of relea ...
- windows 查看端口被占用进程
查看占用63243是谁 C:\Users\Administrator>netstat -aon|findstr "63243" TCP 172.27.33.11:63243 ...
- IIS网站最大并发连接数
打开网站服务器IIS---[控制面板]-[管理工具]--[Internet信息服务IIS管理器] 打开应用程序池--找到网站对应使用的应用程序池--选择右侧[高级设置] 在[高级设置]窗口可看 ...
- java synchronized详解[转]
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- hdu 1686 KMP算法
题意: 求子串w在T中出现的次数. kmp算法详解:http://www.cnblogs.com/XDJjy/p/3871045.html #include <iostream> #inc ...
- 网站如何集成Facebook和Twitter第三方登录
最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...
- C#通过Redis实现分布式锁
Redis有三个最基本属性来保证分布式锁的有效实现: 安全性: 互斥,在任何时候,只有一个客户端能持有锁. 活跃性A:没有死锁,即使客户端在持有锁的时候崩溃,最后也会有其他客户端能获得锁,超时机制. ...
- jQuary总结9:html()的常见用法
1html() 不传参数 用于获取内容 //html <div> <p></p> <span></span> 文本 </div> ...
- js流程图:aworkflow.js
auto-workflow 用于快速构建各种关系图的库 github地址:https://github.com/auto-workflow/AWorkflow 快速开始 npm install awo ...