Java基础突击第三天0006(值传递,字符串传递,引用传递)

值传递,引用传递,String传递的数值变化。

值传递:

public class TestJava{
}
class Person{
int age = 30;
}
class Demo{
  public static void transfer(int tempT){
tempT = 50;
}
  public static void main(String[] args){
Person per = new Person();
System.out.println(per.age);
transfer(per.age);
System.out.println(per.age);
}//main

}//Demo

per.age是数值,所以传递到函数transfer中的只是per.age的副本,

无论副本在方法transfer中如何变化,per.age本身并不发生变化。

输出:

30

30


引用传递:

扫描二维码关注公众号,回复: 1843634 查看本文章

public class TestJava{

}
class Person{
int age = 30;
}
class Demo{
  public static void transfer(Person perTemp){
perTemp.age = 50;
}
  public static void main(String[] args){
Person per = new Person();
System.out.println(per.age);
transfer(per);
System.out.println(per.age);
}//main

}//Demo

此为引用对象传递,transfer方法接收了Person类的对象per,并将其age属性赋值50。

因为是引用传递,方法中对对象的改变操作会保存下来。

输出:

30

50

String传递:

public class TestJava{
}
class Person{
String name = "FangXy";
}
class Demo{
  public static void transfer(String nameTemp){
nameTemp = "Hello";
}
  public static void main(String[] args){
Person per = new Person();
System.out.println(per.name);
transfer(per.name);
System.out.println(per.name);
}//main
}//Demo

虽然String是引用类型,不过别忘了字符串一旦生成不可改变。

传递的参数为per.name,为String类型变量。

per.name 指向 “FangXy”。

当per.name传递进transfer时,nameTemp与per.name同时指向“FangXy”

每一个字符串都是一个匿名String类型变量,在内存中开辟空间写入“Hello”

将nameTemp指向“Hello”的存储地址。同时断开nameTemp和“FangXy”直接的连接。

方法结束后,nameTemp与“Hello”同时等待销毁,per.age依然指向“FangXy”。

分析结束。

输出:

FangXy

FangXy

但如果方法接收的是类的对象,且字符串是类中属性。

public class TestJava{
}
class Person{
String name = "FangXy";
}
class Demo{
  public static void transfer(Person perTemp){
perTemp.name = "Hello";
}
  public static void main(String[] args){
Person per = new Person();
System.out.println(per.name);
transfer(per);
System.out.println(per.name);
}//main

}//Demo

对象传入方法transfer后,perTemp和per同时指向一块内存区域(同一个对象)。

per.name和perTemp.name均为“FangXy”(per和perTemp指向同一对象)。

在transfer方法中,perTemp.name被修改为“Hello”。

此时,per与perTemp指向的同一对象的name属性变为了Hello。“FangXy”字符串进入垃圾回收机制。

退出方法transfer之后,修改保留。此时per指向的对象,其name属性为“Hello”。

输出:

FangXy
Hello





猜你喜欢

转载自blog.csdn.net/u012144068/article/details/80892789