1.除了基本型别外,传的是reference。
2.你的newname()方法就是生成一个temp对象然后返回temp啊。
3.是的,在堆中。基本型别在栈中。

解决方案 »

  1.   

    1。引用
    2。返回的应该是对象经过处理之后,但是这个过程中,有没有创建副本,我也不太清楚。这方面C++就十分清楚。
    3。应该是,heap吧。Java里边的对象都是new出来的。动态分配内存。
      

  2.   

    要是有这样一段代码:
    public String change1(String str){
    ...//处理str的代码段
    return str;
    }
    void main(String[] args){
    String name="Liming";
    String name1=change1(name);
    }
    既然对象都是传递引用,那么在函数当中对参数name的改变,会改变调用前的值么?
    换句话说,name在通过change1(name)之后,它的值发生变化了么?
      

  3.   

    不会
    name 的值没有变化
    系统 创建了一个新的 String 并返回给了 name1 这的新 String 的引用
      

  4.   

    但java不是传递引用吗?
    为什么在返回时又要创建一个新的对象返回呢?
      

  5.   

    传递引用 并不矛盾
    name 的引用确实被传给了 change1(name)
    要不然 change1(name) 怎么知道 name 是什么呢但是 String 是一个很特殊的 对象
    一旦被创建了 就无法被更改
    只能重新创建一个 String
    Java 中也只有 String 是特殊的
      

  6.   

    对于 其他类 不会的
    只有 String 对象是不可变的