值传递和引用传递

本文通过两个示例深入探讨了Java中的值传递和引用传递。在值传递中,方法内部的修改不会影响原始变量;而在引用传递中,对象的属性可以通过方法进行修改。示例展示了如何使用Person类来演示引用传递,强调了基本类型与引用类型的差异,并解释了两者的内存表现。
摘要由CSDN通过智能技术生成
package com.oop.demo01;

/**
 * @ClassName: Demo04
 * @Author: 南冥有猫不须铭
 * @Date: 2021/3/23-23:01
 * @Description: 04 值传递
 */

//值传递(Java是值传递)
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a); // 1

        Demo04.change(a);
        System.out.println(a); // 1
    }

    //返回值为空
    public static void change(int a){ // a = 1
        a = 10; // a = 1
    } //走出change方法后,当前的 a = 10,但是外面的 a 还是等于 1
}

/*
值传递 和 引用传递 的区别:
值转递,指的是方法调用时,复制一份实际参数(基本类型的值 或者 引用对象)到方法参数中。这样在方法中参数变更了,不影响实际参数。
引用传递,指方法调用时,直接将实际参数传递到方法参数中,对方法参数的变更,会影响实际参数。
概念中的 实际参数 和方法参数 指的是 基本类型的值 或者 引用对象。 引用对象 是引用本身,不是引用对象所指向的 实际对象。
 */
package com.oop.demo01;

/**
 * @ClassName: Demo05
 * @Author: 南冥有猫不须铭
 * @Date: 2021/3/24-2:17
 * @Description: 05 引用传递(类似C语言中的指针,传递的是地址)
 */

//引用传递:对象,本质还是值传递       (引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。)

//对象,内存!

public class Demo05 {
    public static void main(String[] args) {
        Person person = new Person(); //new一个Person()对象,这是实例化的过程
        System.out.println(person.name); //null

        Demo05.change(person);
        System.out.println(person.name); //秦疆
    }

    public static void change(Person person){
        //person是一个对象:指向的是---> Person person = new Person(); 这是一个具体的人,可以改变属性!   (类似C语言的“指针”?)
        person.name = "秦疆"; // 这里修改的是下面Person类中的name的值,而不是这里的person.name的值
    }
}

//定义了一个Person类,有一个属性:name
class Person{   //一个类中只能有一个public class,但是可以有多个class
    String name; //null
}

/*
int num = 10;
String str = "hello";
num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

num = 20;
str = "java";
对于基本类型 num,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。
"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)
 */

/*
值传递 和 引用传递 的区别:
值转递,指的是方法调用时,复制一份实际参数(基本类型的值 或者 引用对象)到方法参数中。这样在方法中参数变更了,不影响实际参数。
引用传递,指方法调用时,直接将实际参数传递到方法参数中,对方法参数的变更,会影响实际参数。
概念中的 实际参数 和方法参数 指的是 基本类型的值 或者 引用对象。 引用对象 是引用本身,不是引用对象所指向的 实际对象。
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值