`
Roader123
  • 浏览: 92708 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 对象型参数的引用传递方式

阅读更多

        对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C和D最终都会指向最初只有D才指向的那个对象。

下面是例子:

 

//: Assignment.java
// Assignment with objects is a bit tricky
package c03;

class Number {
  int i;
}

public class Assignment {
  public static void main(String[] args) {
    Number n1 = new Number();
    Number n2 = new Number();
    n1.i = 9;
    n2.i = 47;
    System.out.println("1: n1.i: " + n1.i +
      ", n2.i: " + n2.i);
    n1 = n2;
    System.out.println("2: n1.i: " + n1.i +
      ", n2.i: " + n2.i);
    n1.i = 27;
    System.out.println("3: n1.i: " + n1.i +
      ", n2.i: " + n2.i);
  }
} ///:~
 Number类非常简单,它的两个实例(n1和n2)是在main()里创建的。每个Number中的i值都赋予了一个不同的值。随后,将n2赋给n1,而且n1发生改变。在许多程序设计语言中,我们都希望n1和n2任何时候都相互独立。但由于我们已赋予了一个句柄,所以下面才是真实的输出:

1: n1.i: 9, n2.i: 47
2: n1.i: 47, n2.i: 47
3: n1.i: 27, n2.i: 27
看来改变n1的同时也改变了n2!这是由于无论n1还是n2都包含了相同的句柄,它指向相同的对象(最初的句柄位于n1内部,指向容纳了值9的一个对象。在赋值过程中,那个句柄实际已经丢失;它的对象会由“垃圾收集器”自动清除)。
这种特殊的现象通常也叫作“别名”,是Java操作对象的一种基本方式。但假若不愿意在这种情况下出现别名,又该怎么操作呢?可放弃赋值,并写入下述代码:
n1.i = n2.i;
这样便可保留两个独立的对象,而不是将n1和n2绑定到相同的对象。但您很快就会意识到,这样做会使对象内部的字段处理发生混乱,并与标准的面向对象设计准则相悖。

 

 

分享到:
评论
1 楼 Roader123 2010-06-29  
public class IntArray {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] i = new int[1];// TODO Auto-generated method stub
		System.out.println(i[0]);
		change(i);
		System.out.println(i[0]);
	}

	public static void change(int[] a ){
		a[0] = 1;
	}
}

======================

0
1

相关推荐

    23.Java对象作为参数传递是传值还是传引用1

    前言在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参本,函数对形参的操作并不

    Java中的值传递和引用传递的区别.doc

    Java 中的值传递和引用传递的区别 Java 中的值传递和引用传递是两个不同的参数...在 Java 中,基本数据类型的参数传递是值传递,而对象的参数传递是引用传递。了解参数传递的机制对于编写高效、可靠的程序非常重要。

    Java语言的方法参数浅析

    通过对典型程序的研究与分析可以看出JAVA语言的参数传递总是传值调用的,但是对于基本类型的参数和对象类型的参数来说,参数传递的情况不完全相同.Java语言不能直接使用传引用调用,但是可以通过数组的方式模拟传引用...

    java 参数传递

    传值还是传引用 详细讲解JAVA参数传递机制 一目了然

    lotus domino java代理_获取传递值json

    Lotus Domino Java 代理获取传递值JSON 在 Lotus Domino 环境中,使用 Java 语言编写代理可以获取传递的 URL 参数,并将其转换为 JSON 字符串。本文将详细介绍如何使用 Java 代理获取 URL 参数,并将其转换为 JSON ...

    multipartform-data 参数传递

    <form method="post" ENCTYPE="multipart/form-data"> file类型职务的普通参数传递到后台问题解决

    为什么Java只有值传递

    我们先看一下值传递和引用传递的概念...值传递的函数中无法改变原始对象,引用传递中函数 可以改变原始对象 我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;

    Java基础:对象及引用祥解

    Java对象及引用是容易混淆却又必须掌握的基础知识,本章阐述Java对象和引用的概念,以及与其密切相关的参数传递。

    Java传参方式-值传递还是引用传递

    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的...

    Struts2中的参数传递

    1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. 在参数传递的过程中,做恰当的类型转化,保证页面上的字符串能够转化成各 式各样的Java对象 接下来,通过四个不同的角度,来具体讲述...

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

    基本类型的传递属于值传递,例如在函数体内部对参数的操作不会影响原始变量的值。而引用类型的传递属于引用传递,例如在函数体内部对参数的操作会影响原始变量的值。 在 Java 中,引用类型的变量在声明后必须通过...

    java的传值与传引用详解

     结果,就像光到底是波还是粒子的问题一样,Java 方法的参数是按什么传递的问题,其答案就只能是:即是按值传递也是按引用传递,只是参照物不同,结果也就不同。  4. 正确看待传值还是传引用的问题  要正确的...

    java类和对象.ppt

    定义类、属性和方法 创建并使用对象、对象和引用 Java方法的参数传递机制 方法的重载 实现良好的封装 构造方法的作用和构造方法重载

    java 返回多个值的问题

    由于某些项目需要知道一个函数处理中需要返回函数的处理状态,同时 ...原因就是java 使用的是对象传递. 那么怎么解决返回多个参数值呢? 解决方式就是用HashMap来保存返回的结果.这样就可以解决多个返回值的问题

    java面向对象考题和答案.doc

    Java面向对象考题和答案详解 本文档将对Java面向对象考题和答案进行详细的解释和分析,从而帮助读者更好地理解Java面向对象编程的概念和技术。 1. 下面代码的输出结果是: public class Main { public static ...

    JAVA面向对象详细资料

    16 方法调用时的引用传递还是值传递 19 17 面向对象语言的三大特性:封装,继承,多态 20 18 什么是封装?封装在哪? 20 18.1 封装的好处? 20 19 访问修饰符 20 20 面向对象的特性-继承 21 20.1 继承的关键字:...

    JAVA面试基础知识题

    25、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递...

    第4章-Java面向对象程序设计-Java语言GUI程序设计-赵满来-清华大学出版社.pptx

    Java程序中方法的调用是按值调用,即调用者将实参的值传递给被调方法对应的形参。 实参与形参的类型、次序和个数一一对应。 基本数据类型参数,形参复制了实参的值,在方法中对形参的改变不会影响实参。 例4.1 编写...

    JAVA类和对象

    面向对象的基本概念 类声明、对象创建 参数传递 this引用 类的管理(包和JAR文件) 字符串类 数组

    Java语言程序设计(第二版)\第04章 面向对象编程.ppt

    消息是对象之间进行交互的主要方式,消息传递是对象行为的实现方式。构成消息的三个要素是:接收消息的对象、接收消息后进行处理的方法、方法所需要的参数。 4. 类和对象 类是对象的软件图纸、模板或原型,它定义...

Global site tag (gtag.js) - Google Analytics