黑马程序员技术交流社区

标题: 基本数据类型与引用数据类型 [打印本页]

作者: 冯培军    时间: 2012-9-28 22:13
标题: 基本数据类型与引用数据类型
基本数据类型的参数传递 与 引用数据类型的参数传递
的内存原理是什么?


作者: 张 涛    时间: 2012-9-28 22:22
基本数据类型是值传递;引用类型传递的是引用。
作者: 宫明星    时间: 2012-9-28 22:27
基本数据类型传递的是值,引用数据类型传递的是地址。
在方法里如果同时改变两个个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变),改变的只是形参
引用数据类型如果改变的话,他改变的是地址指向的堆中的数据,所以方法结束后也会改变
作者: 徐-星星    时间: 2012-9-28 22:48
基本数据类型按值传递,相当于复制了一份过去,引用数据按地址传递,两个地方根据地址使用同一份数据,如被更改,则原有数据也会更改,例如数组,在传递数组时,如果接收到数组之后,对其修改,那么原来的数组也会同时修改,因为它们指向同一个地址!
作者: 李建强    时间: 2012-9-28 22:49
本帖最后由 李建强 于 2012-9-28 22:54 编辑

一、简单类型是按值传递的(pass by value),
当以参数形式传递变量是,其实传递的是基本类型的副本
因为改变的是副本,所以对这个参数怎么改变都不影响正本(原来的值)。
二、引用也是按值传递的(pass by value)

首先,引用是什么?
引用类似有C种的指针,但是我们却看不到它的值,
也可以说引用是一种数据类型,我们建立多个引用,
这些引用即使指向一个对象,也是不相同的,
同一个对象可以有多个不同的引用。
因为它们都有自己的内存地址。可以理解为保存地址的类型。
引用如果传递的话是传递的是这个引用的一个副本。

这个问题有对象是按值还是按引用两种说法,各有道理。
官方说法是按值。两种说法可以说都对,这个问题起源于C中的指针既能传值也能传指针。
但是按传引用好理解。

Java中改变参数的值有两种方法:
一、通过“=”号赋值,不会影响到源数据。
二、传递引用,正相反,会改变源数据。

我只想说打这些字很累,而且还犯困...版主加一分吧...



作者: 翁鹏    时间: 2012-9-28 22:50
本帖最后由 翁鹏 于 2012-9-28 22:57 编辑

你要了解内存中的参数传递的原理要讲到 栈帧 这里我说不清楚!
但Java中的参数传递都是采用按值传递的,也就是说传的是拷贝(副本),Java中的方法调用会产生大量的副本,占用了一些资源,对效率有一定的影响。
基本数据类型的话,方法并不能够改变原值,因为方法接受的是原值的副本,所以修改的也是副本,原值并不改变!
引用类型的话,方法接收引用的副本,这样原引用于副本引用是相同的,即指向同一个对象,所以方法操作副本引用也可以改变对象的状态!
作者: 乔九    时间: 2012-9-28 23:04
基本数据类型的参数传递一般在调用函数时仅相当把堆中数值复制一下传递给调用函数而对传递的数值本身没有影响不会改变数值例如:
void method()
{
    int x=0;
    this.change(x);
    System.out.println(x);结果仍然为0;
}
void int change(int i)
{
     i=7;
}
引用数据类型的参数传递操作的是内存中的地址例如:

      void method1(){
   StringBuffer x=new StringBuffer("Hello");
   this.change(x);
  }
  
  void int change(StringBuffer i){
   i.append(" world!");
  }
//结果为helloworld
作者: 马振兴    时间: 2012-9-29 00:46
所谓引用,就是指针了,就是说对象指向的不是数据本身,而是它所在的内存地址.
数组就是引用类型




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2