java的值传递和引用传递



先看一个例子

//定义一个对象
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基础中的Reference和引用类型?

首先要大致了解 Java 的几种引用类型。如下图所示,JDK 1.2 之后新增了 Reference 的概念,给开发人员提供了与 GC 交互的一种渠道。《深入理解 Java 虚拟机》中对于几种引用类型...

java的四种引用

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

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

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

Java 值传递详解

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

Java开发者必知的15个核心概念,第8个让你恍然大悟!

你是不是经常在面试中被问到Java的基础概念,却总是回答得不够全面?别担心,今天我们就来聊聊Java开发中那些必须掌握的核心知识点,帮你轻松应对各种技术面试! 1. ClassLoader:Java类...

Java8特性之方法引用

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