天天看點

Java基礎-面向對象-對象的引用傳遞與對象的值傳遞

package test;

import org.junit.Test;

public class ObjectAndValue {

	@Test
	public void test1(){
		//變量傳遞指派時,是傳遞的值的對應位址,而不是變量的位址
		String s1 = "aa";
		String s2 = "bb";
		s2 = s1;
		
		System.out.println("s1:"+s1);
		System.out.println("s2:"+s2);
		s1="cc";
		System.out.println("s1:"+s1);
		System.out.println("s2:"+s2);
		System.out.println("這是因為變量傳遞指派時,是傳遞的值的對應位址,而不是變量的位址");
		//對象(或者引用)傳遞指派時,實際傳遞的是這個對象的存儲位址
		StringBuffer sb1 = new StringBuffer();
		sb1.append("aaa");
		StringBuffer sb2 = new StringBuffer();
		sb2.append("bbb");
		sb2 = sb1;
		System.out.println("s1:"+sb1);
		System.out.println("s2:"+sb2);
		sb1.append("ccc");
		System.out.println("s1:"+sb1);
		System.out.println("s2:"+sb2);
		System.out.println("這是因為對象(或者引用)傳遞指派時,實際傳遞的是這個對象的存儲位址");
		
	}
	int i = 1;
	public static double ddddd = 50.0;
	String s = "ceshi";
	StringBuffer sb = new StringBuffer("test");
	public void testvalue(int i,String s,StringBuffer sb ,double ddddd){
		i = 20;
		ddddd = 66.6;
		s = "ts";
		sb.append("ts");
	}
	
	public void testvalue2(){
		sb = new StringBuffer("ttttttt");
		sb.append("ts");
	}
	
	
	@Test
	public void test2(){
		System.out.println(i);
		System.out.println(ddddd);
		System.out.println(s.hashCode());
		System.out.println(s);
		System.out.println(sb.hashCode());
		System.out.println(sb);
		this.testvalue(i,s,sb,ddddd);
		System.out.println("---testvalue----");
		System.out.println(i);
		System.out.println(ddddd);
		System.out.println(s.hashCode());
		System.out.println(s);
		System.out.println(sb.hashCode());
		System.out.println(sb);
		this.testvalue2();
		System.out.println("---testvalue2----");
		System.out.println(sb.hashCode());
		System.out.print(sb);
	}
	
}