java值传递

java是值传递还是引用传递

值传递

是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数

引用传递

是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数

情况一:

  • 基本数据类型:
public class TestJavaPass {
    public static void main(String[] args) {
        TestJavaPass tj = new TestJavaPass();
        int i=10;
        tj.pass(i);
        System.out.println("print in main, i is "+i);
    }
    public void pass(int j){
        j=20;
        System.out.println("print in pass, j is "+j);
    }
}
  • 结果
print in pass, j is 20
print in main, i is 10
  • 结论

    传入基本数据类型时,为值传递不会改变其本身

情况二:

  • 传入对象并改变其自身属性

    public class TestJavaPass {
        public static void main(String[] args) {
            TestJavaPass tj = new TestJavaPass();
    //        int i=10;
    //        tj.pass(i);
    //        System.out.println("print in main, i is "+i);
            User user = new User();
            user.setName("hollis");
            user.setGender("Male");
            tj.pass(user);
            System.out.println("print in main , user is "+user);
        }
        public void pass(int j){
            j=20;
            System.out.println("print in pass, j is "+j);
        }
        public void pass(User user){
            user.setName("hollischuang");
            System.out.println("print in pass , user is "+user);
        }
    }
    
  • 结果

    print in pass , user is User{name='hollischuang', gender='Male'}
    print in main , user is User{name='hollischuang', gender='Male'}
    
  • 结论

    传入为引用类型时,对象的属性改变

情况三:

  • 传入对象的引用,不改变对象的属性

    public class TestJavaPass {
        public static void main(String[] args) {
            TestJavaPass tj = new TestJavaPass();
    //        int i=10;
    //        tj.pass(i);
    //        System.out.println("print in main, i is "+i);
            User user = new User();
            user.setName("hollis");
            user.setGender("Male");
            tj.pass(user);
            System.out.println("print in main , user is "+user);
        }
        public void pass(int j){
            j=20;
            System.out.println("print in pass, j is "+j);
        }
        public void pass(User user){
            user = new User();
            user.setName("hollischuang");
            System.out.println("print in pass , user is "+user);
        }
    }
    
  • 结果

    print in pass , user is User{name='hollischuang', gender='null'}
    print in main , user is User{name='hollis', gender='Male'}
    
  • 结论

    方法pass中形参user首先指向main方法中的user,然后再新建user类的时候会重新指向新建的user,后续改变新建user,main方法中的user并未改变,这里是值传递,传递的是对象的引用

结论:

java是值传递,基本数据类型传递复制的对象,引用数据类型传递其引用,如果在方法中提供了修改引用对象的方法则会修改其对象,否则不会修改

posted @ 2022-11-23 17:42  与否业务NOW  阅读(160)  评论(0)    收藏  举报