`

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 是传值还是传引用,问题主要出在对象的传递上,因为 Java 中简单类型没有引用。既然争论中提到了引用这个东西,为了搞清楚这个问题,我们必须要知道引用是什么。  简单的说,引用其实就像是一个对象的名字...

    2数组.rar数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。

    数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。 注意:如果...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...

    [java]读书笔记整理:一切都是对象

    作用域决定了在其内定义的变量名的可见性和生命周期。在C,C++和java中,作用域由花括号的位置决定。例如: { int x=12; //只有x 可用 { int y=100; //x,y 都可用 } //只有x 可用 //y ...

    Java最全面试题200道

    2.如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。 3.如果引用是类的成员变量,则必须当场赋值,否则编译会报错。 (2)用来修饰一个方法 当使用...

    java 编程入门思考

    10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入中读取数据 10.5.5 管道数据流 ...

    Java初学者入门教学

    10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入中读取数据 10.5.5 管道数据流 ...

    java联想(中文)

    10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入中读取数据 10.5.5 管道数据流 ...

    Java基础知识总结(总共六章)

    候虽然可以扩充类的功能,但是其本身也存在以下限制:在java 中不允 许多重继承:一个子类只能继承一个父类,不能继承多个父类; 在java 中允许多层继承,在继承中子类不能访问父类中的私有操作,而 只能继承全部的...

    Java中this与super的区别

    因为子类中的成员变量或方法名优先级高, 所以子类中的同名成员变量或方法就隐藏了超类的成员变量或方法, 但是我们如果想要使用超类中的这个成员变量或方法,就需要用到super. 。。。。。。。。。。。。。

    值类型和引用类型的区别

    引用类型变量的Equals比较的是二者的引用地址而不是内部的值,值类型变量的Equals方法比较的是二者的值而不是……哦对了,值类型压根儿没有引用地址; • 值类型不能作为其它任何类型的基类型,因此不能向值类型中...

    JAVA_Thinking in Java

    10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入中读取数据 10.5.5 管道数据流 ...

    java 面试题 总结

    由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 18、heap和stack有什么区别。 栈是...

    Thinking in Java简体中文(全)

    10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入中读取数据 10.5.5 管道数据流 ...

    Thinking in Java 中文第四版+习题答案

    5.1.1 创建独一无二的包名 5.1.2 自定义工具库 5.1.3 利用导入改变行为 5.1.4 包的停用 5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    Java的六大问题你都懂了吗

     final使得被修饰的变量"不变",但是由于对象型变量的本质是"引用",使得"不变"也有了两种含义:引用本身的不变,和引用指向的对象不变。  引用本身的不变:  final StringBuffer a=new StringBuffer("immutable...

    基于JAVA的俄罗斯方块游戏设计与实现【开题报告】.pdf

    (2)C++的优点 C++是对 C 语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从 SIMULA 67 中吸取了 类,从 ALGOL 68 中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了 Ada 的 类属和 Clu ...

    Think in Java(中文版)chm格式

    10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入中读取数据 10.5.5 ...

    开题报告-基于JAVA的俄罗斯方块游戏设计与实现.doc

    (2)C++的优点 C++是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从SIMULA 67中吸取了类,从ALGOL 68中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了Ada的类属和 Clu的模块特点,...

Global site tag (gtag.js) - Google Analytics