QUOTE: |
public class TestRef { public static void main(String[] args) { ValueObject vo1 = new ValueObject("A", 1); System.out.println("after vo1: " + vo1.getName()); //=A changeValue1(vo1); System.out.println("after changeValue1: " + vo1.getName()); //=A1, changed changeValue2(vo1); System.out.println("after changeValue2: " + vo1.getName()); //=A1, changeValue2內部的賦值不會影響這裡。 } /** * 使用vo1自身的函數對其內部數據進行改變是有效的,函數外可反映出來 * 這種object稱為可變的(mutable) * @param vo1 */ private static void changeValue1(ValueObject vo1) { vo1.setName("A1"); } /** * 在函數內給vo1重新賦值不會改變函數外的原始值 * @param vo1 */ private static void changeValue2(ValueObject vo1) { vo1 = new ValueObject("B", 2); System.out.println("inside changeValue2: "+ vo1.getName()); //=B,賦值操作引起的結果變化僅在changeValue2內部有效 } } class ValueObject { public ValueObject() {} public ValueObject(String name, int id) { this.name = name; this.id = id; } private String name; private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
QUOTE: |
ValueObject v2 = new ValueObject("C", 3); ValueObject v3 = new ValueObject("D", 4); v2 = v3; System.out.println("after v2=v3"); System.out.println("v2= "+ v2.getName());//=D System.out.println("v3= "+ v3.getName());//=D v3.setName("C1"); System.out.println("after v3 setnameTo C1"); System.out.println("vo2= "+ v2.getName());//=C1 System.out.println("vo3= "+ v3.getName());//=C1 |
[火星人 ] java經典問題 傳值還是傳引用已經有542次圍觀