java(十三)参数传递

Java中的参数传递:分为值传递和引用传递

这里讲的参数传递针对的是方法里面传递的值的时候发生的情况
但本质上,Java中只有值传递。引用传递,其实可以理解为传的是类似指针,地址的东西。

1.值传递

只有基本数据类型采用值传递,特点是传递的是值的拷贝,传递完后两者就没有关系了。也就是说方法内 的值,不会影响原始参数的值

基本数据类型:
·整型:int,long,byte,short
浮点型:float,double
字符型:char
布尔型:boolean
注:8种基本数据类型以外的数据类型都为引用类型。

public class PassByValueExample {

    public static void main(String[] args) {

        int x = 10;

        change(x);

        System.out.println(x); // 输出仍然是 10,因为方法内的修改不会影响原始值

    }

    public static void change(int x) {

        x= 20;

      System.out.println(x); //栈,先进后出,执行完方法后,change弹出

    }

}

2.引用传递

在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。
虽然你可以将对象传递给方法,但方法接收的是对象引用的副本,因此在方法内部修改对象的内容会影响原始对象。

需要注意的是,虽然在对象传递时,看起来好像是按引用传递,但实际上仍然是按值传递,只不过传递的值是对象引用的副本,这意味着你可以修改对象的状态,但不能修改对象引用本身。如果将新的对象赋值给方法内的参数,原始引用不会受到影响。

public class PassByReference {
    public static void main(String[] args) { 
            int [] a={1,2,3};
            System.out.println(a[0]);
            change(a);
            System.out.println(a[0]);
            int [] b={1,2,3};
            change1(b);
        System.out.println(b[0]);
    }
    public static void change(int[] a ){
        a[0]=100;
    }
    /**
     * 在涉及引用数据类型的传递时,
     * 方法调用可以改变所指向对象的属性,
     * 但绝不能改变原变量所引用的对象,
     */
    public static void change1(int[] b ){
        b = new int[]{13,14,15};
        b[0]=b[0]+10;

    }
}
public class PassByReferenceExample {
    public static void main(String[] args) {
        StringBuilder str = new StringBuilder("Hello");
        reassignStringBuilder(str);
        System.out.println(str); // 输出 "Hello",因为重新分配了一个新的对象给参数
    }
    public static void reassignStringBuilder(StringBuilder s) {
        s = new StringBuilder("New Value");
    }
}

 

3.String类型传递

先说结论,String类型传递与基本数据类型的传递效果相似。不会改变。值传递

3.String类型传递
先说结论,String类型传递与基本数据类型的传递效果相似。不会改变。值传递
public class Test{
    public static void main(String[] args) {
        String a = "hehe";
        modifyStr(a);
        System.out.println("a的值"+a);//hehe
  }
    public static void modifyStr(String s){
        s = s+"haha";
        System.out.println("s的值"+s);//hehehaha
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫1981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值