引用传递是整个Java基础的灵魂部分 以下有三个程序分析
第一道
class Demo{
private int num;
public Demo(int num){
this.num = num;
}
public void setNum(int num){
this.num = num;
}
public int getNum(){
return num;
}
}
public class TextDemo7{
public static void main(String args[]){
Demo demo = new Demo(10);
fun(demo);
System.out.println(demo.getNum());
}
public static void fun(Demo temp){
temp.setNum(30);
}
}
输出结果为30
图解
这是一个最基础的引用传递,在方法之中只需要接受Demo类对象,就表示两个栈内存同时指向一块堆内存所作的修改一定可以保留下来。
第二道
public class TextDemo7{
public static void main(String args[]){
String str = "Hello";
fun(str);
System.out.println(str);
}
public static void fun(String temp){
temp = "World";
}
}
输出结果为Hello
图解
本题解释只有一句话“字符串一经声明,不得更改”
数值传递
public class TextDemo7{
public static void main(String args[]){
int x = 10;
fun(x);
System.out.println(x);
}
public static void fun(int temp){
temp = 20;
}
}
输出结果为10
本程序属于一个数值关系,传递到方法里面的数据就相当于是一个数据的拷贝,至于方法里面如何修改与之前无关
对于String这种数据类型由于自身的特殊性所决定的 *** 作模式(不可该变模式) 如果难以理解,就按基本数据类型的方式理解。
第三道
class Demo{
private String msg;
public Demo(String msg){
this.msg = msg;
}
public void setMsg(String msg){
this.msg = msg;
}
public String getMsg(){
return this.msg;
}
}
public class TextDemo7{
public static void main(String args[]){
Demo demo = new Demo("Hello");
fun(demo);
System.out.println(demo.getMsg());
}
public static void fun(Demo temp){
temp.setMsg("World");
}
}
输出结果为World
此程序与第一道程序分析严格说是一样的,下面以两种情况进行分析
1.把String当成普通数据类型理解
以上分析并不严谨,毕竟String是引用数据类型
2.用完整的关系分析
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)