samtiger


QQ:418148757
Name:yangchuan
数据加载中……
关于java数据类型和参数
    最近看了一些资料,清理了一下java基础方面的知识,现写下点笔记,待以后查阅。
    1: java的数据类型可以分为引用类型和原始类型(或内置类型)。
    2:java编程语言只有值传递参数。
       
       参考了网上的一些说话,边的两点其实可以通过一个例子来解释。
     
 class TblBsUserType(){
     
private Long butyId;
     
private TblBsDepartmentType tblBsDepartmentType;
     
private String butyName;
     
private String butyPassword;
     
private String butyRemark;
     
private String butyEmail;
     
     
public Long getButyId() {
        
return this.butyId;
    }

    
    
public void setButyId(Long butyId) {
        
this.butyId = butyId;
    }

   
//为了保持简洁,其他的属性与上相似
  }
 

上边我创建了一个间单的用户实体类,现在我们来构建这个实体类的对象,代码如下:
public class TestUser extends TestCase {

public void testAddUser() throws Exception {
            
        TblBsUserType user 
= new TblBsUserType();
}


}
上边我创建了一个用户对象,实际上上边这个过程,可以理解成这么几个步骤或状态:
 a: 右边    new TblBsUserType(),这句是在内存中创建了一个用户实例,并通过“()”这对小括号去调用了不带参数的构造函数来初始化这个对象
 b: 并用 user这个变量。指向了这个对象,所以user就可以说是对这个对象的引用。
 c: 当有一句user=null;的时候,表明user不再指向上边这个对象,上边这个对象此时就不在被任何对象牵制,这个时候的它就成为了垃圾回收机制关注的对象,等待被其回收。至于什么时候回收,就看垃圾回收机制什么时候执行了。
    所以在把user作为参数传给某个方法的时候,user是被值copy过去的,因此我们可以去改变user引用的这个对象里的任何东西,但是,我们在方法里头改变了user参数的引用,跳出函数后,user变量还是指向上边这个对象的。
参考资料如下:
   /////////////////////以下内容来自http://www.ibm.com/developerworks/cn/java/passbyval/index.html////////////

Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。这是一个重要特性,正如随后的代码示例所示的那样。

在继续讨论之前,定义 按值传递按引用传递这两个术语是重要的。 按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。 按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

关于 Java 应用程序中参数传递的某些混淆源于这样一个事实:许多程序员都是从 C++ 编程转向 Java 编程的。C++ 既包含非引用类型,又包含引用类型,并分别按值和按引用传递它们。Java 编程语言有基本类型和对象引用;因此,认为 Java 应用程序像 C++ 那样对基本类型使用按值传递,而对引用使用按引用传递是符合逻辑的。毕竟您会这么想,如果正在传递一个引用,则它一定是 按引用传递的。很容易就会相信这一点,实际上有一段时间我也相信是这样,但这不正确。

在 C++ 和 Java 应用程序中,当传递给函数的参数不是引用时,传递的都是该值的一个副本(按值传递)。区别在于引用。在 C++ 中当传递给函数的参数是引用时,您传递的就是这个引用,或者内存地址(按引用传递)。在 Java 应用程序中,当对象引用是传递给方法的一个参数时,您传递的是该引用的一个副本(按值传递),而不是引用本身。请注意,调用方法的对象引用和副本都指向同一个对象。这是一个重要区别。Java 应用程序在传递不同类型的参数时,其作法与 C++ 并无不同。Java 应用程序按值传递所有参数,这样就制作所有参数的副本,而不管它们的类型。

////////////////////////////////////////-----------------具体请到该网站察看------------------------------

posted on 2007-09-24 20:13 sam.chuan.yang 阅读(849) 评论(2)  编辑  收藏

评论

# re: 关于java数据类型和参数 2007-09-27 19:25 千里冰封

JAVA里面都是按值传递 的,引用的时候,是引用的值的拷贝
  回复  更多评论    

# re: 关于java数据类型和参数 2007-09-30 09:53 yi.c

进一步明白了
  回复  更多评论    

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问