`

Java 变量名不是引用本身

 
阅读更多

Java里面对象的传递是通过对象的引用,而引用又是用变量名表示的,但是注意变量名不是引用本身。如下示例程序:

变量c的重新赋值并不影响之前表示的引用(对象)。

 

/*
 * @(#)PassedReferenceWillNotChange.java	2014年5月7日
 *
 * Copyright (c) 2014 Wu Owen. All rights reserved.
 */

package com.labj.main;

/**
 * Passed object c is stored in B, when c is assigned to another object, object stored in B will not
 * change.
 * 
 * @author owen
 */
public class PassedReferenceWillNotChange {

	public static void main(String[] args) {
		C c = new C(1);
		B b = new B(c);
		System.out.println("A.f()");
		c = new C(2);
		// b.setC(c);
		b.g();
	}
}

class B {
	C c;

	public B(C c) {
		this.c = c;
	}

	void g() {
		System.out.println("B.g()");
		System.out.println("c.getId(): " + c.getId());
	}

	void setC(C c) {
		this.c = c;
	}
}

class C {
	int id;

	public C(int id) {
		this.id = id;
	}

	int getId() {
		return id;
	}
}

 

 

分享到:
评论

相关推荐

    java 常量与变量

    - **引用数据类型** 包括类、接口和数组,它们都是对象的引用,而不是对象本身。 ### 变量的声明和初始化 变量声明时可以同时初始化,也可以分开进行。例如: ```java int count; // 声明一个变量 count = 0; // ...

    java &android; 环境变量设置

    创建一个新用户变量,变量名为ANDROID_SDK_HOME,变量值设置为Android SDK的实际路径,例如`C:\Users\YourUsername\AppData\Local\Android\Sdk`(在Windows 7中可能是`C:\Program Files (x86)\Android\android-sdk`...

    Java变量与数据类型、数据运算中易混知识点总结

    引用数据类型主要包括类(class)、接口(interface)和数组,它们都是对象的引用,而不是对象本身。 在数据运算方面,Java支持算术运算、关系运算、逻辑运算、位运算和赋值运算。算术运算包括加法(+)、减法(-)...

    Java中对象与引用对象的关系

    因此,对于 nemo 的理解应该是:nemo 是一个引用新创建的 Someone 类对象的变量(如同 C 语言的指针变量),它本身并不是一个对象! ```java 引用变量 nemo 对象所在内存地址(设运行时为其分配起始地址为 100 号的...

    Java中的成员变量

    此外,可以使用`this`关键字来引用当前对象的实例变量,虽然在大多数情况下,这并不是必需的。 2. 静态变量(类变量) 静态变量由static关键字修饰,它们属于类本身,而非类的实例。这意味着,不论创建多少个对象,...

    MLDN魔乐JAVA_09深入引用、this关键字、对象比较.rar

    变量名`来访问实例变量。同时,`this`也可以在构造器中调用其他构造器,实现代码复用。 对象比较在Java中是相当重要的。通常,我们可以使用`==`操作符来比较两个对象的引用是否指向同一块内存,即判断它们是否是同...

    java变量的五种方式t共2页.pdf.zip

    当声明一个引用类型的变量时,实际上是在创建一个指向对象的指针,而不是对象本身。例如,`String str = new String("Hello");`在这里,`str`是一个引用,指向内存中的字符串对象。 3. **局部变量**: 局部变量在...

    Java对象及其引用的理解

    在Java中,所有的参数传递都是按值传递,这意味着当我们将一个变量作为参数传递给方法时,实际传递的是该变量的副本,而不是变量本身。因此,对于基本类型(如int,double等),方法内部对参数的修改不会影响到外部...

    java 如何访问同名的方法或变量

    1. **命名规则**:Java中的标识符(包括方法名和变量名)必须以字母、下划线(_)或美元符号($)开头,后续可以是字母、数字、下划线或美元符号。区分大小写,因此"myMethod"和"mymethod"是不同的。 2. **作用域**...

    java中对象创建、初始化、引用

    在Java中,当我们通过赋值操作符`=`将一个引用赋值给另一个引用时,实际上是传递了对象的地址,而不是对象本身。例如: ```java A a1 = new A(); A a2 = a1; // a2现在也指向了a1所指向的同一个对象 ``` 这里的`a2...

    java对象引用易混解析

    ` 这一行代码声明了一个名为 `veh1` 的引用变量,它可以指向 `Vehicle` 类型的对象。 4. **引用赋值**:通过 `=` 操作符将对象与引用关联起来。例如,`veh1 = new Vehicle();` 这一行代码将 `veh1` 引用指向新创建...

    java中引用和c++中引用的区别.docx

    由于Java是按值传递,改变`x`不会影响到`a`,除非你直接改变`A(1)`的内容,这将影响所有引用它的变量。 然而,C++的引用则完全不同。C++中的引用不是独立的对象,而是已存在对象的别名。一旦`A& b = a;`被声明,`b`...

    Java中引用类型传值的代码清单.pdf

    在Java编程语言中,引用类型变量实际上是对象的引用或指针,而非对象本身。当我们讨论“引用类型传值”时,意味着在方法调用时,传递的是对象引用的一个副本,而不是对象本身。以下是对给定代码清单的详细解释: 1....

    第02章 Java编程基础 01 变量与标识符

    对于引用类型的变量,如对象,赋值实际上是复制对象的引用,而不是对象本身。这就是Java中的“传值”和“传引用”的区别。 在Java中,还有一种特殊的变量——常量,它们一旦被赋值后就不能改变。可以使用关键字...

    Java引用Dll的使用说明.rar

    这通常通过将dll文件放置在Java的bin目录下或者系统的PATH环境变量中完成。另外,对于64位系统,可能还需要提供64位版本的dll。 步骤3:注册DLL 某些DLL可能需要在注册表中注册才能正常工作。提供的注册表文件(reg...

    java中的数据类型,变量使用规则,自动类型转换

    5. **变量名建议不使用中文**:虽然Java语法并不禁止使用中文作为变量名,但是在实际开发中,为了避免可能出现的编码问题和乱码问题,推荐使用英文命名。 ### 自动类型转换 Java中的自动类型转换是指当执行某个...

    java的传值与传值后的改变

    但是,不能改变引用本身,即不能让引用指向另一个对象。例如: ```java public void swap(List<Integer> list) { list.set(0, 10); } List<Integer> numbers = new ArrayList(); numbers.add(5); swap...

    java 之方法调用 方法传参 值传递还是引用传递字节码

    这意味着传递的是对象引用(内存地址)的一个副本,而不是对象本身。因此,如果在方法内部修改对象的属性,原始对象会受到影响,因为两个引用指向同一块内存。但如果重新分配引用,原始引用将不受影响。 字节码是...

Global site tag (gtag.js) - Google Analytics