`
supportopensource
  • 浏览: 515556 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

类引用数据类型的赋值操作

阅读更多
  对于类引用数据类型的赋值操作,类引用变量存储的是对象的引用,两个变量之间的赋值就是将一个变量存储的对象引用赋给另一个变量,最终使得这两个变量引用同一个对象,因此此时无论通过哪一个引用变量来操作对象,都会影响到另一个引用变量所引用的对象。
  注意:引用类型可进行赋值的条件是在赋值运算符“=”的左边的变量被显式声明的类型必须与“=”右边的变量的类型相同或有继承关系,否则编译出错。
  例如:创建类A的两个对象并分别赋值给类型为A的两个变量,这样引用变量mya与myb就分别引用了两个对象,此时通过这两个引用变量来操作对象都不会影响到对方。
类A的代码如下:
public class A{
	private String name;                //定义一个String类型的成员变量
	public void setName(String name){   //设置成员变量值的方法
		this.name=name;
	}
	public String getName(){            //返回成员变量值的方法
		return this.name;
	}
}

  创建类A的两个对象,并通过引用变量进行引用,然后通过引用变量来操作这两个对象,代码如下:
A mya = new A();//创建类A的一个对象,由变量mya进行引用
A myb = new A();//创建类A的另一个对象,由变量myb进行引用
mya.setName("a");//通过引用变量mya调用对象的setName()方法设置成员变量值为“a”
myb.setName("b");//通过引用变量myb调用对象的setName()方法设置成员变量值为“b”
System.out.println("mya.name:"+mya.getName());//通过变量mya调用被引用对象的getName()输出成员变量值
System.out.println("myb.name:"+myb.getName());//通过变量myb调用被引用对象的getName()输出成员变量值

  运行结果如下:
mya.name:a
myb.name:b
  下面对上面的代码进行修改,将变量myb赋给变量mya,修改代码如下:
A mya = new A();
A myb = new A();
mya.setName("a");
myb.setName("b");
mya = myb;//将引用变量myb赋值给引用变量mya
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());
mya.setName("c");//通过引用变量mya调用所引用对象的setName()方法,设置成员变量值为“c”
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());
myb.setName("d");//通过引用变量myb调用所引用对象的setName()方法,设置成员变量值为“d”
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());

  运行结果如下:
mya.name:b
myb.name:b
mya.name:c
myb.name:c
mya.name:d
myb.name:d
  从结果可以看出,通过“mya = myb;”赋值操作后,引用变量mya与myb引用了同一个对象,因此通过其中任何一个变量来操作被引用的对象都会影响到另一个变量所引用的对象。
但在执行了“mya = myb;”表达式后,如果将一个引用变量赋值为null,即让该变量不引用任何对象,那么此时的另一个引用变量时不受影响的。
例如下面的代码,将变量myb赋值给变量mya后,再将mya赋值为null:
A mya = new A();
A myb = new A();
mya.setName("a");
myb.setName("b");
mya = myb;
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());
mya = null;        //将变量mya赋值为null,则mya不引用任何对象
System.out.println("myb.name:"+myb.getName());

  运行结果如下:
mya.name:b
myb.name:b
myb.name:b
分享到:
评论

相关推荐

    javaScript的数据类型

    ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和 String。还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。ECMAScript 不支持任何创建...

    Java基础知识之数据类型和操作符

    Java的数据类型可以分为两类:基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double和char,它们代表了不同的数值类型。引用数据类型包括类、接口和数组,它们可以用来创建更复杂的...

    值类型和引用类型的区别

    值类型和引用类型的区别: 似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第... C#中基本数据类型是值类型,结构也是值类型。而数组、类、接口、字符串都是引用类型。

    第2章 数据类型、变量和常量

    为语言间互操作性提供基本框架的通用类型系统(CTS)的层次结构 值类型、引用类型及其差异 ...预定义基本数据类型的使用 类型转换方法:隐式转换、显式转换(强制转换)和Convert类提供的类型转换方法

    VC CString最全面的总结 常用数据类型使用转换详解等总结

    CString 拷贝 & 赋值 & "引用内存块" 什么时候释放? 4 FreeExtra()的作用 5 Format(...) 与 FormatV(...) 6 LockBuffer() 与 UnlockBuffer() 6 CString 只是处理串吗? 6 AllocSysString()与SetSysString(BSTR*) 7 ...

    JavaScript数据操作_浅谈原始值和引用值的操作本质

    我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值。 首先明确,值和类型是两...

    PHP中=赋值操作符对不同数据类型的不同行为

    作为一个PHP的新手,一直对PHP的引用困惑了很久,今晚仔细看了用户手册和做了一些实验,终于明白了其中的原理和细节,特别是=操作符对于不同类型的不同行为。

    WindowsFormsApp2.rar

    在进行赋值操作的时候,它和值类型一样,也是先有一个复制的操作,不过它复制的不是实际的数据,而是引用(真实数据的内存地址)。所以引用类型的变量在赋值的时候,赋给另一变量的实际上是内存地址。这样赋值完成后...

    C++对象和指针的引用

    而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。下面举一例子说明this指针的应用。 #include class A { public: A() { a=b=0; } A(int i, int j) { a=i; b=j...

    Python-内置数据类型.zip

    ==================内置数据类型========================= 第二章 009.程序的构成 010.对象的基本组成和内存示意图 011.引用的本质_栈内存和堆内存_内存示意图 012.标识符_帮助系统的简单使用_命名规则 013....

    JavaScript引用类型和基本类型详解

    当我们进行赋值操作时,解析器会首先分析数据是值类型还是引用类型。 两种访问方式: 基本类型值:按值访问,操作的是他们实际保存的值; 引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再...

    JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题

    就拿博客园的首页右边的搜索举例吧,用控制台操作。      现在我需要从另外一个地方将数据传给input,让其在一刷新的时候就显示数据。  这不难啊,于是我按照我的理解做了  代码如下:    此时,id为zzk...

    多数据库操作帮助类

    不填连接名称,默认找对应帮助类的数据库类型+Config。例如:MySql数据库,默认配置文件为:MySqlConfig 引用DbHelper.HelperMini命名空间,随之调用其方法即可 初始化:MySqlHelperMini helper = new ...

    C++大学教程,一本适合初学者的入门教材(part1)

    6.5 用类实现Time抽象数据类型 6.6 类范围与访问类成员 6.7 接口与实现方法的分离 6.8 控制对成员的访问 6.9 访问函数与工具函数 6.10 初始化类对象:构造函数 6.11 在构造函数中使用默认参数 6.12 使用析构...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    10.8 有关指针的数据类型和指针运算的小结 167 10.8.1 有关指针的数据类型的小结 167 10.8.2 指针运算的小结 167 10.8.3 void 指针类型 168 11 结构体与共用体 11.1 定义一个结构的一般形式 170 11.2 结构类型变量的...

    javascript中基本类型和引用类型的区别分析

    基本类型和引用类型 ECMAScript包含两个不同...这五种基本数据类型可以直接操作保存在变量中的实际值。 看下面例子: var a = 10; var b = a; b = 20; console.log(a); // 10 var bl = true; var bl1 = bl; bl1 =

    (c语言)数据结构教程

    数据类型是一个值的集合和定义在此集合上的一组操作的总称。 三、抽象数据类型(Abstract Data Type 简称ADT) 是指一个数学模型以及定义在此数学模型上的一组操作 ADT有两个重要特征: 数据抽象 用ADT描述程序处理的...

    经典C/C++面试题目大汇总(全附答案).doc

    声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。 3. 将“引用”作为函数...

Global site tag (gtag.js) - Google Analytics