当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

JAVA中的指针,引用及对象的clone[Java编程]

赞助商链接



  本文“JAVA中的指针,引用及对象的clone[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Java语言的一个长处就是撤消了指针的概念,但也招致了很多程序员在编程中常常忽视了对象与引用的辨别,本文会试图澄清这一概念.并且由于Java不能通过简单的赋值来办理对象复制的问题,在开辟历程中,也常常要要利用clone()办法来复制对象.本文会让你理解什么是影子clone与深度clone,熟习它们的辨别、长处及缺陷.

看到这个标题,是不是有点困惑:Java语言明确阐明撤消了指针,因为指针常常是在带来便利的同时也是招致代码不安全的本源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于利用早已臭名昭著的"GOTO"语句.Java放弃指针的概念绝对是极端明智的.但这只是在Java语言中没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用,只不过在大多时刻Java中不用关心若何操作这个"指针",更不用象在操作C++的指针那样胆战心惊.唯一要多多关心的是在给函数传送对象的时刻.以下例程:

package reference;
class Obj{
   String str = "init value";
   public String toString(){
     return str;
   }
}
public class ObjRef{
   Obj aObj = new Obj();
   int aInt = 11;
   public void changeObj(Obj inObj){
     inObj.str = "changed value";
   }
   public void changePri(int inInt){
     inInt = 22;
   }
   public static void main(String[] args)
   {
     ObjRef oRef = new ObjRef();
    
     System.out.println("Before call changeObj() method: " + oRef.aObj);
     oRef.changeObj(oRef.aObj);
     System.out.println("After call changeObj() method: " + oRef.aObj);
     System.out.println("==================Print Primtive=================");
     System.out.println("Before call changePri() method: " + oRef.aInt);
     oRef.changePri(oRef.aInt);
     System.out.println("After call changePri() method: " + oRef.aInt);
   }
}
/* RUN RESULT
Before call changeObj() method: init value
After call changeObj() method: changed value
==================Print Primtive=================
Before call changePri() method: 11
After call changePri() method: 11
*
*/

这段代码的主要部份调用了两个很相近的办法,changeObj()和changePri().唯一差别的是它们一个把对象作为输入参数,另一个把Java中的基本范例int作为输入参数.并且在这两个函数体内部都对输入的参数举行了窜改.看似一样的办法,程序输出的后果却不太一样.changeObj()办法真正的把输入的参数改变了,而changePri()办法对输入的参数没有任何的改变.

从这个例子知道Java对对象和基本的数据范例的处理是不一样的.和C语言一样,当把Java的基本数据范例(如int,char,double等)作为进口参数传给函数体的时刻,传入的参数在函数体内部变成了部分变量,这个部分变量是输入参数的一个拷贝,全部的函数体内部的操作都是针对这个拷贝的操作,函数履行完毕后,这个部分变量也就完成了它的使命,它影响不到作为输入参数的变量.这种方法的参数传送被称为"值传送".而在Java顶用对象的作为进口参数的传送则缺省为"引用传送",也就是说仅仅传送了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的.当函数体内部对输入变量改变时,实质上就是在对这个对象的直接操作.

除了在函数传值的时刻是"引用传送",在任何用"="向对象变量赋值的时刻都是"引用传送".如:

package reference;
class PassObj
{
   String str = "init value";
}
public class ObjPassValue
{
   public static void main(String[] args)
   {
     PassObj objA = new PassObj();
     PassObj objB = objA;
     objA.str = "changed in objA";
     System.out.println("Print objB.str value: " + objB.str);
   }
}
/* RUN RESULT
Print objB.str value: changed in objA
*/


  以上是“JAVA中的指针,引用及对象的clone[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .