补一句我的理解:
  JAVA中参数传递方式就只有一种. [按值传递].

解决方案 »

  1.   

    JAVA中没有取值运算(*), 所有C中所谓的Out参数在JAVA中是不可能实现的. 对不对??
      各位大哥.
      

  2.   

    java中传递参数的方式当然不止一种拉,还有传址方式的
      

  3.   

    JAVA中没有取值运算(*), 所有C中所谓的Out参数在JAVA中是不可能实现的. 对不对??
    ======================================java可以返回一个对象或者一个数组啊
      

  4.   

    上面两位兄弟:
       我看的JAVA书也说有两种传递方式. 但我理解他们本质上是一样的. 都是[按值传递]
     看下面的代码
     // 理解为引用还是指针先不说. 只是一个名词而已. 大家理解的语义应该是一样的. 
     Integer MyInteger = new Integer(10);  //   定义一个引用
     
     void foo(Integer Param) // 定义函数foo 参数按引用传递吗??? 不是的. 这里只是       告诉编译器 这个foo接收一个引用作为参数. 但其传递这个引用的参数传递方式是[按值传递] 
     {
     }   所有才会有上面 classtype = 10 的结果. 如果真的是按引用传递 那么应该是classtype = 11!
      

  5.   

    Java的引用是一种受保护的指针。
    第一、Java的引用总是指向某个东东的;没有指向对象就指向null,不会出现什么都不指向的野指针;使用引用永远也不会导致程序崩溃
    第二、Java引用指向的地址的变更对程序员是透明的;系统可能把一个对象从一个地方搬到另一个地方,但是你不必知道地址的变化——这对GC很重要
    第三、Java不允许对引用进行类似C++中指针运算那样的运算;原因很简单,因为这可能是你的引用无效啊
      

  6.   

    jimshen(jimshen) :
     当然 靠返回值也可以实现Out参数的功能!
      

  7.   

    谢谢 Polarislee(北极星) 的指点
      

  8.   

    好像C++区分指针和引用的吧?不过他的引用和java不太一样
      

  9.   

    所有“小型数据” 比如 int char float .... 都是传 值
    所有“大型数据” String 、类 、数组 …… 都是传 地址不管是用指针实现传地址,还是真的把内存地址的值传来传去,
    我值知道它没有把 实体 传过去。就是这样,小菜鸟的理解 :)
      

  10.   

    java不许编程人员采用值调用(call-by-value)或引用调用(call-by-reference)传递每一个参数。基本数据类型总是采用值调用,其他对象都是引用。
      

  11.   

    比如Object o=new Object();
    o总是指向Object();
    但o并不是地址,因此不是指针,o有点类似于c++里的*o,但你永远无法取得o
      

  12.   

    我快要疯了
    private static double seekNearestPoint(
                Point p, Point[] points, Point nearestPoint) {
            if(points.length <= 1 && p.equals(points[0]))
                throw new IllegalArgumentException();
            nearestPoint = p.equals(points[0]) ? points[1] : points[0];
            /*Do not use statement "double leastDistance =
             p.distance(returnPoint);" since it need square root, or statement
             "double leastDistanceSq = p.distanceSq(points[0]);" for it will first
             search varible points and then points[0].
            */
            double leastDistanceSq = p.distanceSq(nearestPoint);
            for (int i = 1, n = points.length; i < n; i++) {
                if(p.equals(points[i]))
                   continue;
                double distanceSq = p.distanceSq(points[i]);
                if(leastDistanceSq > distanceSq) {
                    nearestPoint = points[i];
                    leastDistanceSq = distanceSq;
                }
            }
            System.out.println(nearestPoint);
            return leastDistanceSq;
        }以上nearestPoint是我要返回的第二个值,由于我想返回两个值,就只有这样写了,但是我在函数类不打印时显示为java.awt.Point[x=23,y=111]
    然后我调用该函数:
            Point aR = null;
            double distanceSqAR = seekNearestPoint(a, points1, aR);
            System.out.println(distanceSqAR + " " + aR);
    显示为52.0 null。
    这简直把我弄胡了一下午,我一直以为是传引用,结果发现根本不是引用。
      

  13.   

    你们这班从C++过来的阿灿,
    public static void main(String[] arv)
    {
       String b = "sdfsfd";
       a(b)
       out.println(b)  >> "sdfsfd"
    }public void a(String s)
    {
       //在里面 s是一个变量,和外面的b指向同一个Object
       s = "456"; 
    }   //相当于
       String b = "sdfsfd";
       String s = b;
       s = "456"
       //b当然还是b但如有对象
    class ABC
    {
     int a = -1;
      public ABC(){}
    }public static void main(String[] arv)
    {
       ABC b = new ABC();
       a(b)
       out.println(b.a)  >> 2
    }public void a(ABC s)
    {
       //在里面 s 是一个变量,和外面的b指向同一个Object
       s.a = 2  >>指向的Object.a = 2
    }这相当于
    ABC b = new ABC();
    ABC s = b;
    s.a = 2(就是b.a = 2)
      

  14.   

    I fu le you,    ClassType = new Integer(11);
    只是把实参ClassType的地址改变了而已,哪儿是改了ClassType的值啊,当然打印出来的ClassType还是原值了。
      

  15.   

    没那么复杂与神秘。
    只理解一点就够了:Java里传递的永远都是值(value),
    对于对象类型,传递的是reference value,
    对于原始类型,传递的是value。都是value。
    这样,以上任何问题都好理解了。大家可以对我信任,我于2003年3月8日通过了SCJP 1.4英文版的考试,成绩是93%。
      

  16.   

    java的对象是传地址,基本的数据类型是只传值
               .
               . 
    int i;
    object o=new object();
    public void add(int i,object o){
    i++;
    o.convert();
    }
    add方法完后i没变,可o的方法确实被调用,
      

  17.   

    强烈同意 feiyuegaoshan(飞跃) Java里传递的永远都是值(value),
    对于对象类型,传递的是reference value,
    对于原始类型,传递的是value。
      

  18.   

    什么叫Reference Value?这么说指针也可以叫指针Value, 呵呵。
      

  19.   

    shenyiwen(沈亦文) : 我认为是这样的. 有指针Value
    int *p = new int(10);
    在这里 编译器给P分配了存储空间 (现在一般为32Bit) , 在这个存储空间存储的值. 就是指针Value
      

  20.   

    原来所谓的Pass by value,是为了区别传过去的参数是原参数的一个拷贝还是其地址。若是拷贝则为按值传送,若是地址则为引用(或指针)。如果把这个地址也强叫作Value当然也没错,因为计算机里面万物最终都是二进制码,不过这样一来Value一词在这里就毫无意义了。