下列轨范在1处是否会有异常,如不美观没有,输出是什么?是否会运行到2处,如不美观会,输出是什么?为什么会有这样的结不美观?
0 E# `1 H5 b! F1 ]: f import java.util.ArrayList;. Q! I2 y1 Q$ Q
import java.util.List;
/ U1 ~; g. u. p9 c3 R: B3 [* m0 y 8 e: i$ n2 w+ z/ ?9 i4 d3 F# D+ O7 m
public class TestClass {
" U9 s+ a Q, H' z, F4 r3 H7 z ^) i. G: w1 i* }
public static void main(String args[]) {
+ Q% u4 \! F7 e( w List list = new ArrayList();- M# _( l1 Z7 p* s0 V
test2(list);
8 M2 u/ u- [5 s! I- u7 A( }4 l System.out.println(list.size()); // 1处
7 f, D! i8 ~1 Q$ w9 z test3(list);
# x# y: V; P1 t3 F8 D) Q System.out.println(list.size()); // 2处
: ~, E& E% {' s4 E/ n }
8 d' w% B& R* f $ K9 A! R# ^/ m. N" l
public static void test2(List list) {
7 Y) @/ L5 I3 P* r( f+ r list = null;$ `" a+ M% `# O c; ^! ?0 l& c
}
2 [; F# R+ s! W) s, b ) R5 w* z6 N: I6 h/ z* q
public static void test3(List list) {) H9 W: }7 x+ o. K& X2 e
list.add(“aaaa“);
e' ^- }5 o- w' ^5 q }$ P2 y7 G6 x1 S# k
}
5 \# \2 O& Q; cplumeChen:, U& B1 d+ j' A
不会犯错的。结不美观是0,1。
) @) C) y" v d ?' B9 v6 B+ U因为test2(list)传得是list的引用,我理解成指针置的副本,list=null;只是把阿谁传入的值设置为null,不改变原本list的指针和内容。test3(list)传入的一样,可是执行了list.add()因为传入指针值的副本也指向原本的阿谁list的地址,所以原本的阿谁list的内容就改变了,size酿成了1了。 |