笔试题-值传递和引用传递

package com.xch.test02;

/**
 * 值传递和引用传递的区别
 * -值传递是将变量副本传到方法中,方法中改变变量,对原有变量不影响,对应深克隆
 * -引用传递是将变量地址传到方法中,方法中改变变量即为改变原有变量,对应浅克隆
 * -其中,String涉及常量池,改变的本质是新建变量,对原有变量不影响,属于值传递
 * 
 * @author Chenghe Xu
 * @date 2022/10/8 10:40
 */
public class ValueAddressTransmit {

    public static void main(String[] args) {
        // 值传递(传递的是内容)测试
        int a=1;
        valueChange(a);
        System.out.println("原来的a="+a);
        
        Integer aa = 11;
        valueChange(aa);
        System.out.println("原来的aa="+aa);
        
        int aaa1 =1111;
        valueChange(aaa1);
        System.out.println("原来的aaa1="+aaa1);
        
        System.out.println("================");
        
        // 引用传递(传递的是地址)测试
        MyObj myObj=new MyObj(1);
        addressChange(myObj);
        System.out.println("原来的myObj.aa="+myObj.aa);
        
        StringBuilder sb=new StringBuilder("ab");
        stringBuilderTest(sb);
        System.out.println("原来的sb="+sb);

        System.out.println("================");
        
        // String字符串类底层final修饰不可变,改变时是新建一个对象到常量池进行地址引用
        String str="ab";
        stringTest(str);
        System.out.println("原来的str="+str);
        
    }
    
    public static void valueChange(Integer a){
        a++;
        System.out.println("方法中的a="+a);
    }

    public static void addressChange(MyObj myObj){
        myObj.aa++;
        System.out.println("方法中的myObj.aa="+myObj.aa);
    }

    public static void stringBuilderTest(StringBuilder sb){
        sb.append("cd");
        System.out.println("方法中的sb="+sb);
    }

    public static void stringTest(String str){
        str="cd";
        System.out.println("方法中的str="+str);
    }

}

class MyObj{
    int aa;
    public MyObj(int aa) {
        this.aa = aa;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BB-X

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

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

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

打赏作者

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

抵扣说明:

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

余额充值