java 值传递笔记

package chunf.test;

public class Test2 {
//    public static void doTest(int i, int j) {  
//        int a = i;  
//        i = j;  
//        j = a;  
//    }  
// 
//    public static void main(String[] args) {  
//        int a = 3;  
//        int b = 4;  
//        doTest(a, b);  
// 
//        System.out.println("a=" + a);  
//        System.out.println("b=" + b);  
//    }
    //以上输出的是 3 4 虽然走了doTest方法 但是,传递的只是对a b 的引用,并未改变a b 的值。
//----------------------------------------------------------------------------------- 
//    public static void doTest(int[] counts) {  
//        counts[0] = 6;  
//        System.out.println(counts[0]);  
//    }  
// 
//    public static void main(String[] args) {  
//        int[] count = { 1, 2, 3};  
//        doTest(count);  
//    }   
//以上输出为6,因为数组传递至方法内,方法将数组改变并在改变后打印改变后的值。
//----------------------------------------------------------------------------------
//    public static void doTest(Test1 a) {  
//        a = new Test1();  
//        a.a++;  
//    }  
//      
//    public static void main(String args[]) {  
//        Test1 a = new Test1();  
//        doTest(a);  
//        System.out.println(a.a);  
//    }
/*
 * Test1{
 *  int a = 2;
 * }
 * */
//以上输出依然为TEST1类中的初始a值,原因是a并非静态的变量,每当new一个新的类,指针指向的地址是变化的。并非被方法处理的TEST1类
//------------------------------------------------------------------------------------
//    public static void doTest(Test1 a) {  
//        a = new Test1();  
//        a.a++;  
//    }  
//      
//    public static void main(String args[]) {  
//        Test1 a = new Test1();  
//        doTest(a);  
//        System.out.println(a.a);  
//    }
/*
* Test1{
*  static int a = 2;
* }
* */
//以上输出为3,因为TEST1类中的变量a是静态的,因此无论new了多少个TEST1类,变量a的地址是不变的。所以操作的都是同一个a
//例如下面例子
//public static void doTest(Test1 a){
//    a = new Test1();
//    a.a++;
//}
//
//public static void main(String[] args) {
//    Test1 tst1 = new Test1();
//    doTest(tst1);
//    Test1 tst2 = new Test1();
//    doTest(tst2);
//    System.out.println(tst1.a);
//    System.out.println(tst2.a);
//}
//这两行输出都是4,因为无论是tst1还是tst2,变量a的地址是不变的,操作的都是同一个a
//----------------------------------------------------------------------------------
//    String str = new String("haha");  
//     
//    char[] ch = { 'a', 'b', 'c' };  
 
//    public static void main(String args[]) {  
//        Test2 tst = new Test2();  
//        ex.change(tst.str, tst.ch);  
//        System.out.print(tst.str + " and ");  
//        System.out.println(tst.ch);  
//    }  
// 
//    public void change(String str, char ch[]) {  
//        str = "lalala";  
//        ch[0] = 'd';  
//    } 
//以上输出haha and dbc由于String是final的,那么tst.str是不被改变的。而数组并非如此,因此数组被改变
}  

你可能感兴趣的:(java)