java中都是值传递。直接上代码了:
1 class TestStaticA { 2 3 static { 4 System.out.println("b"); 5 } 6 7 public TestStaticA() { 8 System.out.println("TestStaticA construction method"); 9 }10 11 protected void say() {12 System.out.println("TestStaticA say hello ");13 }14 15 static {16 System.out.println("bb");17 }18 19 }
继承类:
1 public class TestStatic extends TestStaticA { 2 3 public static int i = 1; 4 static { 5 System.out.println("i" + i); 6 i=2; 7 } 8 9 public TestStatic() {10 System.out.println("TestStatic construction method"+i);11 }12 13 public void say() {14 System.out.println("TestStatic say hello");15 }16 17 18 19 public void appendex(StringBuffer a, StringBuffer b) {20 a.append("a");21 b=a;22 }23 24 public static void main(String[] args) {25 TestStaticA test = new TestStatic();26 new TestStatic();27 test.say();28 StringBuffer a = new StringBuffer("a");29 StringBuffer b = new StringBuffer("b");30 new TestStatic().appendex(a,b);31 System.out.println(a.toString()+":"+b.toString());32 }33 34 }
结果:
1 b 2 bb 3 i1 4 TestStaticA construction method 5 TestStatic construction method2 6 TestStaticA construction method 7 TestStatic construction method2 8 TestStatic say hello 9 TestStaticA construction method10 TestStatic construction method211 aa:b
注意红色答案部分,虽然是一个值传递(引用副本),但是引用副本所指向的内容发生改变,当方法结束时,引用副本消亡,但是已经改变了原来的内容。