Java基础篇:什么是值传递

本文介绍了Java内存的四个区域,重点讲解了Java方法的参数传递机制。Java中参数传递始终为值传递,即传递参数的副本,无论是基本类型还是引用类型。尽管引用类型传递的是引用的值,但该值仍指向原始对象,因此可以通过方法内部修改对象状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java类的结构的内存解析

内存分为4部分:栈、堆、方法区、静态域

:对象的引用名,数组的引用名,局部变量(方法的形参,方法内定义的变量,代码块中定义的变量)

:new 出来的”东西”(包括类的成员变量)

方法区:(含字符串常量池)

静态域:静态的field

Java的参数传递机制

方法,必须有其所在类或对象调用才有意义。若方法含有参数:

形参:方法声明时的参数

实参:方法调用时实际传给形参的参数值

Java的实参值如何传入方法呢?

        Java里方法的参数传递方式只有一种:值传递。

值传递是指在调用函数时将实参复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

public class Test{

    public static void main(String[] args){
        int x = 5;
        change1(x);
        Integer obj = 5;
        change2(obj);
        System.out.println(x); // 5
        System.out.println(obj); //5
    }


    public static void change1(int x){
         x = 3; 
    }
    
    public static void change2(Integer obj){
       obj = 3 ;
    }

} 

无论是基本数据类型的参数传递还是引用数据类型的参数传递,都不会影响原来方法内的值。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响

注意:但我们要注意的是,虽然是值传递,但是引用数据类型指向的是同一块地址,如下中所示,changeName()中的cat同样是可以操作“小白”这块地址空间的。

public class Main2 {

    public static void main(String args[]) {

        Cat cat = new Cat();
        cat.name="小白";
        System.out.println(cat.name); //小白
        changeName(cat);
        System.out.println(cat.name); //小黑
    }
    private static void changeName(Cat cat){
        cat.name="小黑";
    }
}


class Cat{
     String name;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大誌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值