public class Test1 {

public static void changeStr(String str){
         str="welcome";
System.out.println(str);
 }  public static void main(String[] args){
  String  str="1234";
 changeStr(str);
 System.out.println(str);
  }
}两次输出分别是什么??Why?

解决方案 »

  1.   

    呵呵,我刚开始学java,有点不太明白。
      

  2.   

    welcome
    1234str引用传递进去,调用方法结束后并没有原来的指向(str是指向"1234"的)
      

  3.   

    曾在这个帖子中回复过方法形式参数与实际参数在调用过程中内存变化示意图,有兴趣的话可以去看一下,或许对理解这道题有一定的帮助。
    http://topic.csdn.net/u/20090523/21/c6c9028b-04de-4aef-8b9e-f63e8eb29864.html
      

  4.   

    这是我刚找到的例子http://www.javaeye.com/topic/12961
      

  5.   

    前几天好像看到过static数据块的问题
      

  6.   

    welcome
    1234String object 不能被改变
      

  7.   

       welcome
       1234
       传进去的只是str的一个拷贝应用,所以并没有改变原来的str的指向地址!
      

  8.   

    welcome
    1234
    传进去的只是str的一个拷贝应用,所以并没有改变原来的str的指向地址!
      

  9.   

    welcome
    1234java中方法的参数都是进行的值传递,而不是传引用
      

  10.   

    welcome
    1234
    很简单的题目啊
      

  11.   

    越是大公司越考基础题,不要忽视基础啊
    welcome
    1234
      

  12.   

    关于String的问题总是渊源流长经久不熄衰而不竭~~~
    console:
    welcome
    1234
      

  13.   

    先出welcome 再出来1234
    是这样吗??
      

  14.   

    huawei也出这种题?
    太棒了,yeah~~
      

  15.   

    welcome
    1234
    传进去的只是str的一个拷贝应用,所以并没有改变原来的str的指向地址!
      

  16.   

    welcome
    1234
    值传递和引用传递。
    值传递时复制一个拷贝,而引用传递时指向同一个内存地址
      

  17.   

    一般情况下,定义string和new一个对象一样,生成两个对象,一个String对象,占32位。另一个是字符串对象本身。java在做函数调用的时候,生成一个String对象副本,同样占32为,其引用指向已经定义的字符串对象。在调用函数之后,只是改变了副本的引用,没有改变字符串对象本省。其实和C的指针是一个道理。public class MainTest { /**
     * @param args
     */
    public static void main(String[] args) {
    StringBuilder str = new StringBuilder("1234");
    System.out.println(str);
    changeStr(str);
    System.out.println(str); } public static void changeStr(StringBuilder str) {
    str.append("welcome");
    System.out.println(str);
    }
    看了这个结果如果不会糊涂,就说明理解了函数调用的实质。
      

  18.   

    welcome
    1234
    test类并没有得到str这个参数
      

  19.   

    welcome
    1234如果是StringBuffer的话就是以下了
    welcome
    welcome
      

  20.   

    String传参的问题,超出简单的传值、传引用的范围。
    看文档,对String的说明——“Strings are constant; their values cannot be changed after they are created.”
    执行str="welcome",不是改变str指向的内存的数据,而是把str指向了另一个位置。当然,只是把changeStr的str指向了另一个位置,而main的str还是指着原来的地方。
    所以最后的输出是:
    welcome
    1234