A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗雪梅 中级黑马   /  2012-9-28 22:55  /  1285 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师讲说java参数传递的只有值传递没有引用传递,但是当一个数组数据做为参数传递的是时候不就是引用传递吗,而且引用传递形参的改变直接影响实参的改变。
class Poke
{
    public static void main(String[] args)
    {
        int n=0;
        int[] arr={5,7,4,19};
      //调用方法   
      Show(n);
   //n是基础类型所以输出n=0形参不改变实参
       System.out.println(n);
       Show(arr);
    //arr是引用类型,就做为了参数传递了并且改变了实参的值
      System.out.println(arr);
    }

   //数组做为参数的方法
    public static void (int n)
   {
       n+=5;
   }
   public static void (int[] arr)
   {
      for(int i=0;i<arr.length;i++)
     {
           arr+=1;
     }
   }
}

帮忙看一下我标红的注释理解的正确的吗?
还有老师说的那句




评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

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

二、引用也是按值传递的(pass by value)

这个问题有对象是按值还是按引用两种说法,各有道理。
官方说法是按值。两种说法可以说都对,这个问题起源于C中的指针既能传值也能传指针。
一开始很多Java程序员都是C程序员转型的,
一看哎呦,传一个对象的引用过来就能改变对象的值,这不就是俺们C中的指针吗?
所以才有了传值还是传引用的讨论。

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

如果你学过C,还是按传引用好理解。
而且这两种说法都可以说对。


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

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
字写得有点多,
因为刚才回答问题总结了一部分,到你这又加了一部分,
都是自己的理解一个字一个字敲出来的。
以前学这块的时候参考了N多的资料。

PS,今天一下午没见到版主了。

点评

版主们,在审核题目勒。见谅!  发表于 2012-9-28 23:22
回复 使用道具 举报
谢谢谢谢,讲得很明白很透彻
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马