`
supportopensource
  • 浏览: 521845 次
  • 性别: 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
分享到:
评论

相关推荐

    C#引用类型的赋值 类的赋值

    #### 二、引用类型赋值过程解析 当我们对引用类型的变量进行赋值操作时,实际上是将源变量所指向的内存地址复制给目标变量。这样两个变量就会指向同一块内存区域。下面通过具体示例来进一步理解这一概念。 #### 三...

    winform 值类型引用类型赋值源码

    // 引用类型赋值 User newUser = user; user.Name = "NewName"; Console.WriteLine($"Original user name: {newUser.Name}, Copied user name: {user.Name}"); // 输出:Original user name: NewName, Copied ...

    javaScript的数据类型

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

    易语言自定义数据类型的内存存储方式

    需要注意的是,易语言中的自定义数据类型在内存中是以值传递的方式进行操作的,这意味着当你将一个自定义数据类型的变量赋值给另一个变量时,实际上是复制了整个数据结构的内容,而不是引用。这种机制在处理大量数据...

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

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

    数组类型赋值及改变

    数组类型赋值及改变是编程中常见的操作,特别是在C/C++这样的语言中,数组的处理需要特别注意,因为它们不是对象,而是直接在内存中分配的一段连续空间。本篇文章将深入探讨数组类型赋值和改变值的技巧,以及如何...

    Java基础--基本数据类型与引用数据类型在内存结构上的区别

    数据类型与引用数据类型在内存结构上的主要区别在于它们存储方式和内存分配的不同。在Java中,数据类型分为两种:基本数据类型(如int、char、boolean等)和引用数据类型(如对象、数组等)。 一、基本数据类型 ...

    数据类型分类.zip

    当一个变量被赋值为引用数据类型时,实际上是在内存中创建了一个对象,并将对象的地址赋值给变量。这意味着多个变量可以指向同一个对象,从而实现数据共享。例如,Java和C#中的类实例就是引用数据类型。 4. 自定义...

    c#数据类型课件,ppt,c#数据类型课件

    引用数据类型则包括类、接口、数组和委托,它们都是对象的实例。 1. 整型:C#提供了多种整数类型,包括byte(8位无符号整数)、sbyte(8位有符号整数)、short(16位有符号整数)、ushort(16位无符号整数)、int...

    Java数据类型操作包含转换代码实例.rar

    在Java编程语言中,数据类型是程序设计的基础,它们分为两大类:基本数据类型和引用数据类型。这个压缩包“Java数据类型操作包含转换代码实例.rar”提供了丰富的代码示例,帮助初学者理解和掌握Java中数据类型的转换...

    delphi事件赋值操作

    事件赋值操作是Delphi中一个重要的概念,它允许我们动态地将一个方法绑定到特定的事件上。下面将详细探讨Delphi事件赋值操作的相关知识点。 1. **事件声明**: 在Delphi中,事件通常作为类的成员声明,其语法如下...

    C++类各种类型转换_数据类型的相互转换_

    例如,较小的数据类型(如int)可以被赋值给较大的数据类型(如long long),这被称为提升(Promotion)。同样,常量表达式或字面量可以被转换为任何兼容的类型。然而,需要注意的是,隐式转换可能会导致精度丢失或...

    VC++常用数据类型及其操作详解

    在VC++编程环境中,了解和熟练掌握常用的数据类型及其操作是至关重要的。本文将深入探讨VC++中的基本数据类型,包括它们的定义、用途以及如何进行常见操作。 1. **基本数据类型** - `char`: 用于存储单个字符,如...

    C#数据类型和变量

    首先,C#的数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型包括整型(如int、byte、short、long等)、浮点型(如float、double)、字符型(char)、布尔型(bool)以及空类型(null)。这些类型由...

    C++学习教程从零开始(四)-赋值操作符共18页.pdf

    10. **作用域解析运算符`:=`与赋值操作符`=`:`=:`是C++中的作用域解析运算符,用于标识命名空间或类的成员,而`=`是赋值操作符,两者在代码中有着完全不同的用途。 以上只是教程中可能涉及的部分内容。通过这18页的...

    Excel 条件赋值操作程序

    下面将详细介绍如何进行条件赋值操作以及相关工具的使用。 1. **条件格式化**:这是Excel中最基础的条件赋值形式,它能改变单元格的样式(如字体颜色、背景色、边框等)来突出显示满足特定条件的数据。例如,你可以...

    拷贝构造函数和赋值操作符号的重载.docx

    它接受一个常量引用类型的参数,通常是对同一类类型对象的引用。当使用等号操作符(`=`)在声明时初始化对象或者将对象作为函数参数传递时,拷贝构造函数会被调用。对于包含动态分配内存的类,如果不自定义拷贝构造...

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

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

    java变量数据类型运算符

    引用数据类型则包括类、接口和数组,它们都指向内存中的对象地址。 运算符在Java中起着至关重要的作用,它们用于执行各种计算、比较和逻辑操作。Java支持以下类型的运算符: 1. **算术运算符**:+、-、*、/、%。...

    java 数据类型讲解

    Java的数据类型主要分为两大类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 ##### 2.1 原始数据类型 原始数据类型包括整型、浮点型、布尔型和字符型等,它们直接存储具体的...

Global site tag (gtag.js) - Google Analytics