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

© 罗雪梅 中级黑马   /  2012-9-28 22:55  /  1483 人查看  /  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 个回复

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

PS,今天一下午没见到版主了。
回复 使用道具 举报
一、简单类型是按值传递的(pass by value),
当以参数形式传递变量是,其实传递的是基本类型的副本,
因为改变的是副本,所以对这个参数怎么改变都不影响正本(原来的值)。

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

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

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

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


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

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马