Java基础篇:什么是值传递
Java类的结构的内存解析
内存分为4部分:栈、堆、方法区、静态域
栈:对象的引用名,数组的引用名,局部变量(方法的形参,方法内定义的变量,代码块中定义的变量)
堆:new 出来的”东西”(包括类的成员变量)
方法区:(含字符串常量池)
静态域:静态的field
" class="reference-link">
Java的参数传递机制
方法,必须有其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。
值传递是指在调用函数时将实参复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
public class Test{
public static void mian(String[] args){
int x = 5;
change1(x);
Integer obj = 5;
change2(obj);
System.out.println(x); // 5
System.out.println(obj); //3
}
public static void change1(int x){
x = 3;
}
public static void change2(Integer obj){
obj = 3 ;
}
}
无论是基本数据类型的参数传递还是引用数据类型的参数传递,都不会影响原来方法内的值。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
注意:但我们要注意的是,虽然是值传递,但是引用数据类型指向的是同一块地址,如1中所示,change2()中的obj同样是可以操作5这块地址空间的。
public class Main2 {
public static void main(String args[]) {
Cat cat = new Cat();
cat.name="小白";
System.out.println(cat.name); //小白
changeName(cat);
System.out.println(cat.name); //小黑
}
private static void changeName(Cat cat){
cat.name="小黑";
}
}
class Cat{
String name;
}
还没有评论,来说两句吧...