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
就这两种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值