Java | 参数传值机制
2024-09-07 20:46:19
值传递
java中,方法中所有的参数的都是“值传递”,就是传递的是原来值的副本,不是原来的参数,因此,改变不会影响到原来的参数。
基本数据类型参数的传值
传递的都是副本,改变以后不会影响到原来的参数。
引用类型参数的传递
传递的是值的副本,但是引用类型指本来就代表一个“对象的地址”。因此,副本和原参数都指向的是同一个地址,改变副本的值,也就会改变原来参数的值了。
例:
public class User {
int id;
String name;
//构造方法
public User(int id, String name) {
this.id = id;
this.name = name;
}
//这个地方传递的是对象的地址
public void test1(User u){
u.name = "李四";
}
//这个地方传递的也是对象的地址
public void test2(User u){
//因为这个地方只是又创建一个新的对象
//调用构造方法,会返回一个地址
//所以这里创建完对象以后,u就是一个新的对象了,跟原来的没有关系了。
u = new User(2, "王五");
}
public static void main(String[] args) {
User user = new User(1, "张三");
System.out.println("原来的值:" + user.name);
user.test1(user);
System.out.println("第一改变后的值:" + user.name);
//为什么第二次改变了,但是输出的值没有改变
user.test2(user);
System.out.println("第二改变后的值:" + user.name);
/*输出的结果:
原来的值:张三
第一改变后的值:李四
第二改变后的值:李四
*/
}
}
细节决定成败!
个人愚见,如有不对,恳请扶正!
最新文章
- iOS:基于CoreText的排版引擎
- cellmap for iphone
- OGRE1.8.1源码编译(VS2008)
- SpringMVC类型转换、数据绑定
- wmic 获得系统硬件信息
- iOS 读书笔记-国际化
- Linuxc - 多c文件程序编译执行
- python读写excel文件
- Tomcat 在 Linux 上的安装和配置
- workerman Channel组件全局广播
- 关于冒泡排序的Java代码实现
- sonar runner的配置
- EJB与JavaBean
- i2c 异常之i2c1 prob 检测超时
- leetcode704
- bzoj2676 Contra
- C#的split()分割字符串
- 学习Tomcat动态加载JSP的Class类
- 在Unity3d中解析Lua脚本的方法
- 004-画图神器-graphviz