美文网首页
引用数据类型的变量互相赋值上的注意事项

引用数据类型的变量互相赋值上的注意事项

作者: sxh不是帅小伙 | 来源:发表于2020-11-15 19:53 被阅读0次

使用一个引用数据类型的变量赋值给另一个引用数据类型的变量时会使两个变量保存同一块堆区域的地址值,修改其中任何一个变量相应的另一个变量也会进行相应的改变,因为二者指向的是一个数据。例如:

public class ObjectTest {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.age = 14;
        s1.name = "Synhard";
        Student s2 = new Student();
        s2 = s1;
        System.out.println("name:" + s2.name + ", age:" + s2.age);

        s1.name = "Bob";
        System.out.println("name:" + s2.name + ", age:" + s2.age);
    }
}

class Student {
    int age;
    String name;
}

在第一次输出s2的属性值时由于s2和s1指向堆区域的同一个数据,因此输出的值与s1相同,这时再将s1的name属性修改为‘Bob’相应的s2的name属性也会修改

但对于引用类型String来说这样是修改是无效的,因为String使用了关键字final做修饰,一旦定义便无法被修改,只能被重新赋值。比如以下代码:

public class ObjectTest {
    public static void main(String[] args) {
        String a="a";
        String b=a;
        b="b";
        System.out.println(a);//output:a
    }
}

b一开始和a指向堆区域的同一个数据,故输出二者的值是相等的。但是修改b的值,不会令a的值修改,此时输出a的值还是原来的'a',因为String是final类型的数据,一旦声明便无法被修改,只能重新赋值。

相关文章

  • 引用数据类型的变量互相赋值上的注意事项

    使用一个引用数据类型的变量赋值给另一个引用数据类型的变量时会使两个变量保存同一块堆区域的地址值,修改其中任何一个变...

  • js的变量赋值机制,object的复制

    变量赋值时基本数据类型:null,undefined,number,string,boolean引用数据类型:ob...

  • javascipt-实现对象的拷贝(深拷贝和浅拷贝)

    1、前言 将一个变量的值赋值给另外一个变量,如果是基本数据类型就很简单直接赋值就可以了。如果是引用数据类型赋值的是...

  • JS赋值、浅拷贝与深拷贝

    赋值 基本数据类型赋值,赋值之后两个变量互不影响 对引用类型进行赋址,两个变量指向同一个对象,改变变量 a 之后会...

  • 如何轻松写出正确的链表代码?

    理解指针或引用的含义 含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针...

  • Java变量的分类

    按数据类型分 基本数据类型 引用数据类型 按在类中声明的位置分 成员变量在使用前都经历过默认初始化赋值类变量sta...

  • 3.Java 引用数据类型

    1.引用数据类型概论 引用数据类型 变量名 这样声明的时候变量为null。 引用数据类型 变量名=new 引用数据...

  • 菜鸟教程笔记

    变量赋值 a=b=c=1a,b,c=1,2,3= 就是创建新的引用并赋值+= 就是给原引用赋值查看变量的引用(地址...

  • Python变量和数据类型

    一. Python中的变量赋值 单变量赋值: 多变量赋值: 二. Python中的数据类型 Python有五个...

  • ES6文集的目录

    基础 变量的解构赋值扩展运算符箭头函数export与import 数据类型 引用数据类型 ES6的数组数组之Arr...

网友评论

      本文标题:引用数据类型的变量互相赋值上的注意事项

      本文链接:https://www.haomeiwen.com/subject/yqqobktx.html