`
supportopensource
  • 浏览: 516296 次
  • 性别: 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,它们代表了不同的数值类型。引用数据类型包括类、接口和数组,它们可以用来创建更复杂的...

    Java中的基本类型和引用类型变量的区别

    在 Java 中,引用类型的变量可以通过赋值操作来改变其指向的对象,例如 MyDate a, b; a = new MyDate(); b = a;这里的 a 和 b 变量都指向同一个 MyDate 对象。 在函数传递方面,Java 中的引用类型的变量也可以作为...

    值类型和引用类型的区别

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

    Python数据类型运算符

    Python 数据类型运算符 Python 中的数据类型可以分为数值类型、布尔类型、字符串类型、列表类型、元组类型、字典类型和集合类型等。每种数据类型都有其特点和应用场景。 数值类型包括整型 int、浮点型 float 和...

    C++全套学习课件数据类型、运算符和表达式.pdf

    C++数据类型可以分为两大类:基本类型和派生类型。基本类型包括整数类型、浮点数类型、字符类型和布尔类型等。整数类型又可以分为signed和unsigned两种,signed整数可以表示负数,而unsigned整数只能表示正数。...

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

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

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

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

    C#数据类型,数组、结构和枚举是学习C#的基础!

    C# 数据类型可以分为两大类:值类型和引用类型。值类型又可以分为简单类型、枚举类型、结构类型和可空类型。引用类型包括类、接口、委托和数组。 数组是 C# 中的一种重要数据类型,它是由相同类型的数据构成的。...

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

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

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

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

    WindowsFormsApp2.rar

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

    SCJP试题集及解析.pdf

    Java语言中的数据类型包括基本数据类型和引用数据类型。基本数据类型包括整数类型、浮点数类型、布尔类型、字符类型等。其中,短整型的数据类型的长度是16 bits,有符号。 3. 变量 Java语言中的变量可以是基本数据...

    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....

    java基础笔试题(标准答案已整理).docx

    基本数据类型包括整型、浮点型、字符型、布尔型等,引用数据类型包括数组、类、接口等。 三、运算符 Java 中的运算符有算术运算符、位运算符、关系运算符、逻辑运算符、赋值运算符等。例如,算术运算符包括加法、...

    东北大学20春《JAVA语言程序设计》在线平时作业3答案.docx

    基本数据类型包括整型、浮点型、字符型、布尔型等,而引用数据类型包括数组、类、接口等。 二、表达式的概念 * 表达式是JAVA语言中的一种语法结构,用于计算一个值。一个表达式可以是单个常量、变量、方法调用或...

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

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

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

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

Global site tag (gtag.js) - Google Analytics