【转】Java是传值还是传引用
1. 简单类型是按值传递的
Java 方法的参数是简单类型的时候,是按值传递的 (pass by value)。这一点我们可以通过一个简单的例子来说明:
/* 例 1 *//** * @(#) Test.java * @author fancy */public class Test { public static void test(boolean test) { test = ! test; System.out.println("In test(boolean) : test = " + test); } public static void main(String[] args) { boolean test = true; System.out.println("Before test(boolean) : test = " + test); test(test); System.out.println("After test(boolean) : test = " + test); }}Before test(boolean) : test = trueIn test(boolean) : test = falseAfter test(boolean) : test = true
/* 例 2 *//** * @(#) Test.java * @author fancy */public class Test { public static void main(String[] args) { StringBuffer a = new StringBuffer("Hello"); StringBuffer b = a; b.append(", World"); System.out.println("a is " + a); }}a is Hello, World
/* 例 3 *//** * @(#) Test.java * @author fancy */public class Test { public static void test(StringBuffer str) { str.append(", World!"); } public static void main(String[] args) { StringBuffer string = new StringBuffer("Hello"); test(string); System.out.println(string); }}Hello, World!
/* 例 4 *//** * @(#) Test.java * @author fancy */public class Test { public static void test(String str) { str = "World"; } public static void main(String[] args) { String string = "Hello"; test(string); System.out.println(string); }}Hello
/* 例 5 *//** * @(#) test.c * @author fancy */void SwapValue(int a, int b) { int t = a; a = b; b = t;}void SwapPointer(int * a, int * b) { int t = * a; * a = * b; * b = t;}void main() { int a = 0, b = 1; printf("1 : a = %d, b = %d\n", a, b); SwapValue(a, b); printf("2 : a = %d, b = %d\n", a, b); SwapPointer(&a, &b); printf("3 : a = %d, b = %d\n", a, b);}1 : a = 0, b = 12 : a = 0, b = 13 : a = 1, b = 0
/** 例 6 *//** * @(#) Test.java * @author fancy */public class Test { public static void swap(int[] data, int a, int b) { int t = data[a]; data[a] = data[b]; data[b] = t; } public static void main(String[] args) { int[] data = new int[10]; for (int i = 0; i < 10; i++) { data[i] = (int) (Math.random() * 100); System.out.print(" " + data[i]); } System.out.println(); for (int i = 0; i < 9; i++) { for (int j = i; j < 10; j++) { if (data[i] > data[j]) { swap(data, i, j); } } } for (int i = 0; i < 10; i++) { System.out.print(" " + data[i]); } System.out.println(); }}78 69 94 38 95 31 50 97 84 11 31 38 50 69 78 84 94 95 97