对于Java引用的三大经典错误

41 篇文章 1 订阅
文章通过两个实验探讨了Java中的值传递原理,澄清了关于值传递和引用传递的常见误解。实验1展示了基本类型的值传递,即使在交换变量后,原始变量值保持不变。实验2则说明了对于对象引用,虽然传递的是引用副本,但修改对象属性会直接影响原始对象,揭示了Java中对象参数的值传递特性。
摘要由CSDN通过智能技术生成

经典错误的三种认识

  • 错误理解一:通过传递的内容区分,如果是个值,就是值传递。如果是个引用,就是引用传递。
  • 错误理解二:Java是引用传递。
  • 错误理解三:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。

实验1:常规的值传递(普通类型)

package com.yinyong;

/**
 * Time    : 2023/3/18 20:04
 * Author  : 王摇摆
 * FileName: ValueTrans.java
 * Software: IntelliJ IDEA 2020.2.2
 * Blog    :https://blog.csdn.net/weixin_44943389?type=blog
 */

/**
 * 本实例学习java中的经典值传递的思想
 * 实验:交换两个数值
 */
public class ValueTrans {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        swap(a, b);

        System.out.println("the output of main function");
        System.out.println("The value of a is " + a);
        System.out.println("The value of b is " + b);

    }

    public static void swap(int a, int b) {
        int temp;
        temp = a;
        a = b;
        b = temp;

        System.out.println("the output of swap function");
        System.out.println("The value of a is " + a);
        System.out.println("The value of b is " + b);

    }
}

实验2:Java中的值传递(引用类型,传递对象引用)

package com.yinyong;

/**
 * Time    : 2023/3/18 20:04
 * Author  : 王摇摆
 * FileName: RefTrans.java
 * Software: IntelliJ IDEA 2020.2.2
 * Blog    :https://blog.csdn.net/weixin_44943389?type=blog
 */

import javafx.scene.input.TouchEvent;

/**
 * 本实例实现引用传递交换两个值
 * 使用类对象引用
 */
public class RefTrans {
    public static void main(String[] args) {
        Student s1 = new Student("张三", 23);
        Student s2 = new Student("李四", 24);

//        swap(s1, s2);//成功交换,Java中的是值传递,传递的是对象引用的副本,但是程序要写好这个东西
        swap1(s1,s2);//交换失败,记住,Java中只有值传递,传递的是对象引用的副本,所以形参的改变并不会影响实参

        System.out.println("The result of main function is :");
        System.out.println(s1.toString());
        System.out.println(s2.toString());


    }

    private static void swap(Student a, Student b) {
        Student temp = new Student();
        temp.age = a.age;
        temp.name = a.name;

        a.name = b.name;
        a.age = b.age;
        b.name = temp.name;
        b.age = temp.age;

        System.out.println("The result of swap function is :");
        System.out.println(a.toString());
        System.out.println(b.toString());

    }

    private static void swap1(Student a, Student b) {
        Student temp = new Student();

        temp = a;
        a = b;
        b = temp;

        System.out.println("The result of swap1 function is :");
        System.out.println(a.toString());
        System.out.println(b.toString());


    }

}

class Student {
    String name;
    int age;


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {

    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王摇摆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值