1、本次的预计讲解的知识
将通过三个程序分析引用传递。
2、具体内容
引用传递是Java的精髓所在,可以说如果引用传递你不清楚,那么几乎就等同于Java你不会,下面将利用三个程序进行引用传递的重复分析。
引用传递的意义:同一块堆内存空间可以被不同的栈内存所指向,不同栈内存可以对同一堆内存进行内容的修改。
范例:第一道引用传递范例
class Message{ private int num = 10; public Message(int num) { this.num = num; } public void setNum(int num) { this.num = num; } public int getNum() { return this.num; } } public class Demo { public static void main(String[] args) { Message msg = new Message(30); fun(msg);//引用传递 System.out.println(msg.getNum()); } public static void fun(Message temp) { temp.setNum(100); } } |
范例:第二道引用范例
public class Demo { public static void main(String[] args) { String msg = "Hello"; fun(msg); System.out.println(msg); } public static void fun(String temp) { temp = "World"; } } |
以上题目只有一个解决思路:String类对象的内容一旦声明将不可改变,对象内容的改变是依靠的是引用地址的改变。
范例:第三道引用范例
class Message{ private String info = "nihao"; public Message(String info) { this.info = info; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } public class Demo { public static void main(String[] args) { Message msg = new Message("Hello"); fun(msg); System.out.println(msg.getInfo()); } public static void fun(Message temp) { temp.setInfo("World"); } } |
但是以上的描述并不严格,因为在程序里面,info也是一个String类的对象,所以如果要想描述的更加清楚,应采用如下的内存关系图。
结论:虽然String属于类,属于引用类型,但是由于其内容不可改变的特点,很多的时候就直接把String当成基本数据类型使用就完了,也就是说:每一个String变量只能够保存一个数据。
3、总结
这三个范例算是一个小小的总结,也算是彻底结束了String类的操作特点。