Java 引用传递

No.1

class Message{
	private int num=12;

	public Message(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}
}
public class testDemo1 {

	 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); 
	 }
}

内存图:

No.2

public class TestDemo2 {
public static void main(String[] args) {
	String msg="Hello";
	fun(msg);
	System.out.println(msg);//String类的对象的内容一旦声明部能改变;对象的改变是依赖引用的改变来实现的;
}
public static void fun(String temp) {
	temp="world";
}
}

内存图:

NO.3

对比 int x=10;  y=x; y=20;和string  a="hello";string b=a; string b="world";很相似;

class Message{
	private String info="hello";

	public Message(String info) {
		super();
		this.info = info;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	
}
public class TestDemo3 {
public static void main(String[] args) {
	Message msg=new Message("hello");
	fun(msg);
	System.out.println(msg.getInfo());
}

public static void fun(Message msg) {
	// TODO Auto-generated method stub
	msg.setInfo("world");
	
}

内存图:

以上的内存图并部严格,因为在程序里面info也是一个String类的对象,如果想要描述得更加清楚可以使用下面的内存关系图

内存tuNo3.2

总结:虽然String属于类,为引用类型,但是由于它的不可变得特点,会把String当作一个基本得类型来使(每个Sting类型的变量只能保存1个数据)

猜你喜欢

转载自blog.csdn.net/qq_29393273/article/details/85208267