class Test {
 private void a() {
  Integer abc = new Integer(5); 
  System.out.println(abc);
  b(abc); 
  System.out.println(abc);
}
 private void b(Integer cc) {
  cc = new Integer(10);
 }
}
如上述写法
两次输出的值一样吗?
a方法里的abc传递到b方法后。。在回到a方法里时。。其值会改变吗。。
原因????

解决方案 »

  1.   

    http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html
    夯实基础
    Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object's fields can be changed in the method, if they have the proper access level. 
      

  2.   


    其实在java里面pass by value说起来很隐晦,就好像玩文字游戏一样。
      

  3.   

    好久没来这个论坛,多年前曾给人详细解说过这个问题
    今天长话短说private void b(Integer cc) { 
      cc = new Integer(10); 

    这段代码相当于
    private void b(Integer cc) { //形参
      Integer _cc = cc;  //注意这里,编译器会定义一个内部的引用(实参)指向参数引用,函数内对参数的操作都是对该内部实参引用进行操作 
      _cc = new Integer(10);  //所以,这里实际上是改变了内部实参引用的指向,参数引用的指向并没有发生变化

    因此,结论是在函数内部改变参数引用的指向,对函数外的参数不造成影响
    这个不论是Java还是C++都是一样的
    这个问题跟by value by reference扯不上关系
    如果对上述所说还不能理解,那就去参阅编译器的实现和函数堆栈实现的资料
      

  4.   

    java和C++并不一样,C++存在引用这个东西,当然也就存在call by reference这个术语。java中的“引用”可以类比一下C++或者C中的指针。
      

  5.   

    我来做个简单简答:
    众所周知,java中值的传递是通过引用来实现的,即不同的声明指向同一个引用,一个改变来,就一起改变来。
    但是,这仅是对于复杂数据类型而言的,对于基本数据类型和字符串,引用变了,值却不发生改变!
      

  6.   

    但是Integer不是基本数据类型
    是对象类型的啊
      

  7.   

    java中都是值传递,引用类型看成是传递地址
      

  8.   

    String[] str = {"1", "2"};
    如果我给b传str的话
    在回到a里 str里的值就会变。