下列轨范在1处是否会有异常,如不美观没有,输出是什么?是否会运行到2处,如不美观会,输出是什么?为什么会有这样的结不美观? * h7 b# i, K/ P: n5 i7 M7 L2 @
import java.util.ArrayList;
& h3 M, \ F# f" F5 s2 S import java.util.List;
& s9 C) l5 u$ j: L1 N( U% D$ R! ]! A
. h2 k: d% V3 P0 @$ I. J0 e public class TestClass {
5 q- p- H8 O0 t
* {" H/ y Q- [( x6 M: a0 d K public static void main(String args[]) {
: {& c5 f$ F7 w' r; M List list = new ArrayList();0 `* ]/ o9 z o" g
test2(list);
l. r1 D( J* b: q0 w System.out.println(list.size()); // 1处+ c; n# h# u5 m2 \; `: } y
test3(list);- C& V: ]+ ?6 v3 a0 f" f- D! C
System.out.println(list.size()); // 2处
; \9 X1 H+ J+ c# H: E( N/ M }: h( N+ q9 I B, N% @
8 F; ?0 v# }9 O# j4 }8 s P public static void test2(List list) {
8 m) s% [4 ]/ R x/ I" ~8 K list = null;
- X! S* g4 _2 h! S" Q4 M- ~: n }
! N- g! L/ w# r1 }7 S' O - f; i% J) F, v
public static void test3(List list) {
) j& }( s Z( V8 c1 h/ N list.add(“aaaa“); W9 y- [ T$ b" s
}
$ m6 T) S* }; W7 P7 C }
' F; {0 V" M& G& |plumeChen:0 m; P" a5 }6 J( H. l
不会犯错的。结不美观是0,1。
% v% F6 T3 |# q- |6 H1 i2 C0 X! `因为test2(list)传得是list的引用,我理解成指针置的副本,list=null;只是把阿谁传入的值设置为null,不改变原本list的指针和内容。test3(list)传入的一样,可是执行了list.add()因为传入指针值的副本也指向原本的阿谁list的地址,所以原本的阿谁list的内容就改变了,size酿成了1了。 |