(看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别

总结:
基本类型的变量值小,可直接拷贝;
对象包含多个值,不容易复制,赋值采用共享同一块内存区域。


基本类型示例:

public class Test{
    public static void main(String[] args){
        int a = 5;//基本数据类型的赋值过程就是值拷贝的过程,将5这个值拷贝给a
        int b = 0;//同理,将0这个值拷贝给a
        b = a;//执行这一步时,将a的值拷贝给了b,b此时的值就是5
        b = 6;//将6这个值拷贝给了b
        System.out.println("a:" + a);//输出 a:5
        System.out.println("b:" + b);//输出 b:6
    }
}

从上面可以看出,修改 a或者b的值时,另一个变量的值不会受到任何影响


引用类型示例:

/**
 * 实体类(引用类型)
 */
public class User{
    public int age;//int默认值为0
}
public class Test{
    public static void main(String[] args){
        User u1 = new User();//u1的引用指向u1的引用
        User u2 = new User();//u2的引用指向u2的引用
        u1.age = 20;
        u2 = u1;//将u2的引用指向u1的引用,即 u2和u1共享同一个内存区域中的数据
        System.out.println("u1的age:" + u1.age);//输出 u1的age:20
        System.out.println("u2的age:" + u2.age);//输出 u2的age:20
        u2.age = 30;
        System.out.println("u1的age:" + u1.age);//输出 u1的age:30
        System.out.println("u2的age:" + u2.age);//输出 u2的age:30
    }
}

从上面可以看出,修改 u1.age或者u2.age的值时,另一个变量的值也会一起变化,因为它们所指向的数据是同一份数据


因为前面讲到基本数据类型和引用数据类型存储的方式不同(详见开头总结),所以因此在对数据进行修改时也会有不同

public class Test {
    public static void main(String[] args) {
        String name = "张三";
        int age = 8;
        String[] su = new String[]{"语文", "数学", "英语"};
        Student stu1 = new Student(age, name, su);

        /*
        *   测试代码
        *   int是基本数据类型
        *   String是比较特殊的引用数据类型
        *   []数组是引用数据类型
        * */
        System.out.println("修改前输出");
        System.out.println(age+"\t"+name+"\t"+ Arrays.toString(su));
        //直接调用方法修改数据
        stu1.直接修改基本数据类型(age);
        stu1.直接修改引用数据类型(name);
        stu1.直接修改引用数据类型2(su);
        System.out.println("修改后输出");
        System.out.println(age+"\t"+name+"\t"+ Arrays.toString(su));

        System.out.println();

        System.out.println("修改前输出");
        System.out.println(stu1.toString());
        //传入引用数据类型修改
        stu1.修改引用数据中的基本数据类型(stu1);
        stu1.修改引用数据中的引用数据类型(stu1);
        stu1.修改引用数据中的引用数据类型2(stu1);
        System.out.println("修改后输出");
        System.out.println(stu1.toString());
    }
}

class Student {
    //基本数据类型
    int age;
    //引用数据类型
    String name;
    //引用数据类型2
    String[] subject;

    public Student(){}

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

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", subject=" + Arrays.toString(subject) +
                '}';
    }

    public void 直接修改基本数据类型(int age) {
        age++;
    }

    public void 直接修改引用数据类型(String name) {
        name += "已修改";
    }

    public void 直接修改引用数据类型2(String[] su) {
        su[0] = "已修改";
    }

    public void 修改引用数据中的基本数据类型(Student stu) {
        stu.age += 2;
    }

    public void 修改引用数据中的引用数据类型(Student stu) {
        stu.name += "已修改2";
    }

    public void 修改引用数据中的引用数据类型2(Student stu) {
        stu.subject[0]="已修改";
    }
}

 输出结果


 总结 :

( 一 ) int作为基本数据类型,是直接把一个值传进方法体进行修改,

而String虽然是引用数据类型,但是因为其特殊性质,也有int这种基本数据类型直接把值拷贝一份传入的特性,

而 [ ] 数组作为正常的引用数据类型,很明显就是把存储值的地址值传入方法进行操作,进而在修改后影响了外部的数据值

(二) 后用 Student对象  存储基本数据类型和特殊的String引用数据类型和正常的 [ ] 数组引用类型,然后进行修改其值,可以发现在外部调用的值都是修改后的结果,因为对象也是引用数据类型,把存储值的地址值传入方法,而方法根据地址值修改后,在外部调用的依旧是地址值链接的值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java是一种面向对象的编程语言,它支持一维和二维数组的定义、引用和初始化。在本次实验中,我们掌握了Java中一维和二维数组的基本概念和用法,并通过编写程序进行了实践操作。 在Java中,一维数组可以看作是一组相同类型的数据的集合,而二维数组则是由多个一维数组组成的集合。定义一维数组时,需要指定数组的数据类型和数组的长度,如以下代码所示: int[] arr = new int[10]; 这段代码定义了一个包含10个整数的一维数组,可以通过索引来访问数组中的元素。在Java中,数组的索引从0开始,因此访问数组中的第一个元素时,需要使用arr[0]的方式进行。 而对于二维数组的定义,需要指定数组的数据类型、第一维和第二维的长度,如以下代码所示: int[][] arr = new int[3][4]; 这段代码定义了一个包含3个一维数组,每个一维数组中包含4个整数的二维数组。可以使用arr[i][j]的方式来访问二维数组中的元素,其中i表示第一维的索引,j表示第二维的索引。 在Java中,数组的引用可以通过数组名来实现。例如,可以使用以下代码来引用一维数组中的元素: int[] arr = new int[10]; arr[0] = 1; 这段代码将一维数组中的第一个元素赋值为1。而对于二维数组,可以使用以下代码来引用数组中的元素: int[][] arr = new int[3][4]; arr[0][0] = 1; 这段代码将二维数组中的第一个元素赋值为1。 初始化数组是指在定义数组时,直接给数组元素赋初值。在Java中,可以使用以下方式来初始化一维数组: int[] arr = {1, 2, 3, 4, 5}; 这段代码将一维数组赋初值为1, 2, 3, 4, 5。而对于二维数组,可以使用以下方式来初始化数组: int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 这段代码将二维数组赋初值为一个3行3列的矩阵。 通过本次实验,我们掌握了Java中一维和二维数组的定义、引用和初始化方法,并能够编写程序对数组进行操作。这对于我们在日后的编程工作中具有重要的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吾欲乘风归去,又恐琼楼玉宇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值