Java的参数传递

Java 不会传递地址, 只会传递值。
什么叫传递值:

	// 传递的是值的拷贝, 不同内存空间, 改变不会影响
1.定义以一个基本数据类型A, 参数传递过去,调用者改变这个A值之后不影响我原来的A
	//传递的是对对象的应用, 同一个内存空间,改变当然影响
2.定义一个 对象A ,  作为参数传递过去,调用者改变这个对象,原来的A受到影响。

看这俩例子就懂了

  1. 基本数据类型 ,传递值的拷贝,前后不影响
    public class TempTest {
        private void test1(int a){
            a = 5;
            System.out.println("test1方法中的a="+a);
        }
        public static void main(String[] args) {
            TempTest t = new TempTest();
            int a = 3;
            t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
            System.out.println(”main方法中的a=+a);
        }
    }

test1方法中的a=5
main方法中的a=3

  1. 引用数据类型, 传递前后指向同一块地址,前后影响
   public class TempTest {
        private void test1(A a){
            a.age = 20;
            System.out.println("test1方法中的age="+a.age);
        }
        public static void main(String[] args) {
            TempTest t = new TempTest();
            A a = new A();
            a.age = 10;
            t.test1(a);
            System.out.println(”main方法中的age=+a.age);
        }
    }
    class A{
        public int age = 0;
    }

test1方法中的age=20
main方法中的age=20

但是一旦调用者开辟新内存空间, 前后就不影响了

    public class TempTest {
        private void test1(A a){
            a = new A();//新加一行
            a.age = 20;
            System.out.println("test1方法中的age="+a.age);
        }
        public static void main(String[] args) {
            TempTest t = new TempTest();
            A a = new A();
            a.age = 10;
            t.test1(a);
            System.out.println(”main方法中的age=+a.age);
        }
    }
    class A{
        public int age = 0;
    }

test1方法中的age=20
main方法中的age=10

你可以把 基本数据类型 和 初始化过的String 记为不影响,其他记为影响

初始化过的String也就是 String s="asd’; 这种的,传s过去,他改不变原来的s
就这两种情况

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章