Java传值还是传引用的思考
2017-09-16 本文已影响22人
橙小张
- 占坑
public class ReferenceTest {
@Test
public void test1(){
boolean flag = false;
changeBoolean(flag);
System.out.println(flag); //false
}
private void changeBoolean(boolean flag){
flag = !flag;
}
@Test
public void test2(){
StringBuffer sb = new StringBuffer("Hello");
changeStringBuffer(sb);
System.out.println(sb.toString()); //Hello world
}
private void changeStringBuffer(StringBuffer stringBuffer) {
stringBuffer.append(" world");
}
@Test
public void test3(){
String s = "Hello";
changeString(s);
System.out.println(s); //Hello
}
private void changeString(String string) {
System.out.println(string);
string = "world";
System.out.println(string);
}
@Test
public void test4(){
int a = 1;
int[] data = new int[1];
changeInt(data, a);
System.out.println(a); //1
System.out.println(data[0]); //2
}
private void changeInt(int[] data, int a){
a = 2;
data[0] = a;
}
@Test
public void test5(){
int a = 1;
int b = a;
a = 2;
System.out.println(b); //1
}
/*
// access flags 0x1
public test6()V
@Lorg/junit/Test;()
L0
LINENUMBER 72 L0
ICONST_1
ISTORE 1
L1
LINENUMBER 73 L1
ILOAD 1
ISTORE 2
L2
LINENUMBER 74 L2
ICONST_2
ISTORE 1
L3
LINENUMBER 75 L3
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ILOAD 2
INVOKEVIRTUAL java/io/PrintStream.println (I)V
L4
LINENUMBER 76 L4
RETURN
L5
LOCALVARIABLE this Lcom/sailfish/learnjava/base/ReferenceTest; L0 L5 0
LOCALVARIABLE a I L1 L5 1
LOCALVARIABLE b I L2 L5 2
MAXSTACK = 2
MAXLOCALS = 3
}
*/
@Test
public void test6(){
int a = 1;
int b = a;
a = 2;
// System.out.println(b);
}
}
/*
test6
L0
LINENUMBER 105 L0
ICONST_1
ISTORE 1
L1
LINENUMBER 106 L1
ILOAD 1
ISTORE 2
L2
LINENUMBER 107 L2
ICONST_2
ISTORE 1
*/