标签:传递 string temp 结果 ring public 注意 一段 nbsp
创建一个Student类
1 public class Student { 2 int age=18; 3 String name="Jack"; 4 }
1 public void changeAge(int in) { 2 in=0; 3 }
1 Student stu=new Student(); 2 System.out.println("尝试改变前stu的age:"+stu.age); 3 stu.changeAge(stu.age); 4 System.out.println("尝试改变后stu的age:"+stu.age);
运行结果:
发现age的值没有改变,猜想传入方法中的参数只是age的一个副本而不是age本身。
1 System.out.println("尝试改变前stu的age:"+stu.age); 2 stu.age=0; 3 System.out.println("尝试改变后stu的age:"+stu.age);
运行结果:
age发生了改变,证明是传入时出了问题,传的是副本。
public void changeName(String str) { String temp="null"; str=temp; }
1 System.out.println("尝试改变前stu的name:"+stu.name); 2 stu.changeName(stu.name); 3 System.out.println("尝试改变后stu的name:"+stu.name);
运行结果:
发现name并没有改变,指向的仍旧是原来的那个对象,猜想传入方法的参数不是name本身而是name的一个副本(也就是地址的一个副本)。
1 System.out.println("尝试改变前stu的name:"+stu.name); 2 stu.name=("null"); 3 System.out.println("尝试改变后stu的name:"+stu.name);
运行结果:
name发生了改变,证明是传入时出了问题,传的是地址的一个副本。
以上所有操作只说明一个结果:Java中传参是值传递,传入方法的只是一个copy。传基本类型的变量时传的是数据的一个copy,传引用类型的变量时传的是地址的一个copy。此时注意引用类型的变量承载的只是对象的地址而不是对象本身哦!
另(可视而不见):注意静态变量的与众不同,改变一个对象的静态变量就相当于改变所有哦。这时候如果使用对象来调用静态变量很容易造成混淆,毕竟它是属于类的。
标签:传递 string temp 结果 ring public 注意 一段 nbsp
原文地址:https://www.cnblogs.com/hbc314/p/12149804.html