阿里云【名师课堂】Java面向对象开发38:引用传递进阶分析
回顾:请先复习《阿里云【名师课堂】Java面向对象开发3 ~ 6:类与对象》中的引用传递初次分析部分,链接如下:https://blog.csdn.net/weixin_43624945/article/details/106590272。
引用传递是Java的核心,想要正常分析代码必须掌握引用传递。下面通过三个程序讲解引用传递。
第一道引用传递
class Message{
private int num ;
public void setNum(int num){
this.num = num ;
}
public int getNum(){
return this.num ;
}
}
public class TestDemo {
public static void main(String args[]) {
Message msg = new Message() ;
msg.setNum(100) ;
fun(msg) ; // Message temp = msg ;
System.out.println(msg.getNum()) ;
}
public static void fun(Message temp){ // 引用传递:Message temp = 对象 ;
temp.setNum(40) ;
}
}
通过内存关系图分析:
第二道引用传递
public class TestDemo {
public static void main(String args[]) {
String str = "hello" ;
fun(str) ; // str与temp指向同一个堆内存空间
System.out.println(str) ;
}
public static void fun(String temp){
temp = "world" ;
}
}
为什么?
- 字符串常量一旦声明不可改变,字符串对象的内容改变依靠的是地址的引用关系变更。
- 详情查看《阿里云【名师课堂】Java面向对象开发21 ~ 25:String类的基本特点》的25、字符串常量不可变更。https://blog.csdn.net/weixin_43624945/article/details/106622718
第三道引用传递
class Message{
private String note ;
public void setNote(String note){
this.note = note ;
}
public String getNote(){
return this.note ;
}
}
public class TestDemo {
public static void main(String args[]) {
Message msg = new Message() ;
msg.setNote("hello") ;
fun(msg) ; // Message temp = msg ;
System.out.println(msg.getNote()) ;
}
public static void fun(Message temp){
temp.setNote("world") ;
}
}
为什么?
- 先把String当作基本数据类型来理解。
- 但是String是引用数据类型,如果要正确的分析应该怎么做?
目前还是不适应博客园的界面,等学成了再回归吧,对我来说当下还是csdn比较方便快捷:https://blog.csdn.net/weixin_43624945