java的值传递和引用传递

createh52个月前 (03-28)技术教程23



先看一个例子

//定义一个对象
public class Student {
    String name;
}
//测试类
public class TestClass {
    public static void main(String[] args) {
        Student stu1;
        stu1 = new Student();
        stu1.name = "小明";
        int a = 10;
        System.out.println("改变前,stu1名字为" + stu1.name);
        System.out.println("改变前,a的值为" + a);

        TestClass myTest = new TestClass();
        myTest.change(a, stu1);
        System.out.println("改变后,stu1名字为" + stu1.name);
        System.out.println("改变后,a的值为" + a);
        }

    void change(int num, Student student) {
        num = num + 10;
        student.name = "小强";}
}
运行结果为:
改变前,stu1名字为小明
改变前,a的值为10

改变后,stu1名字为小强
改变后,a的值为10

这个怎么理解呢?

对于基本数据类型,我们向change方法传参数时,传的是基本数据类型的值,也就是将10这个值传递到了change方法中,对于change方法,传入的参数相当于:int num=10,这时方法内部对num变量进行增加,并不影响到方法外部的a的值。

对于引用数据类型,我们向change方法传入参数时,传的是new Student()这个对象在堆中的地址,我们将地址值传递到change方法中,对于change方法,传入的参数相当于:Student student=地址值,这时候对对象进行操作,相当于还是对方法外部的对象进行操作,因为传的是地址,这个地址指向的就是外部的new Student()

但对于String这个类来说,如果传一个string的对象,方法内部对对象进行赋值,比如:s="aaa",这个aaa相当于一个新的string对象,对于传入方法的string引用地址,相当于s指向了一个新的"aaa"的引用地址,所以外部的字符串引用并不会改变

相关文章

java的四种引用

java 中的引用分为 4种1.强引用 引用存在就不会被GC *2.软引用 heap memory(堆内存)满了就会被GC掉 *3.弱引用 每次GC就会回收掉(应用有:ThreadLocal) *4....

详细介绍一下Java中的什么是值传递?什么是引用传递?

Java中的参数传递是通过值传递进行的,即使是对象也是遵循这个规则,想要了解这个原理,首先我们就需要了解什么是值传递,什么是引用传递?值传递值传递是在调用方法的时候,方法接收到的参数是实际参数的一个副...

Java 值传递详解

开始之前,我们先来搞懂下面这两个概念:形参&实参值传递&引用传递形参&实参方法的定义可能会用到 参数(有参的方法),参数在程序语言中分为:实参(实际参数,Arguments):用于传递给函数/方法的参...

Java8特性之方法引用

方法引用简介如果在Lambda表达式的具体逻辑处理和某个方法的处理逻辑相同,则可以直接将方法名称指代具体的处理逻辑,从而使得整个Lambda表达式更加的简洁,逻辑更加清晰。比如: System.out...

java注解的原理,作用,特性和使用方法

Java 注解1. 原理Java注解是一种在源代码级别添加元数据的方式,其处理过程分为三个主要步骤:编译时处理:注解信息由编译器读取并生成字节码中的属性。例如,@Override用于检查方法是否正确重...

Java周边:Java密封类:为什么它们如此重要?

你是否曾经因为某个类被意外继承而头疼不已?Java 15 引入的密封类(Sealed Classes),正是为了解决这个问题!它让你能够精确控制哪些类可以继承或实现你的基类,彻底告别“继承失控”的烦恼...