两条:
1。Java is by Reference
2。function的参数作用域在该函数体类String display = "nihao"; // display refered to String "nihao"
setString(display); //参数 str 得到 String "nihao" 的 reference
                    //dispaly referred to "nihao", 没变
函数体内:
{  
  str = "Hello!"; //str 指向 “Hello"; dispaly 仍然 指向 "nihao"
}
函数体外:
System.out.println(display); //dispaly 仍然 指向 "nihao";result2 is "nihao"

解决方案 »

  1.   

    没看明白。
    你又没有改变dispaly的值?
      

  2.   

    俺解释一下,所谓的传递引用,其实就是说传递地址:
    Public void setString(String str){
       str = "Helle!";
    }
    // 现有如下的语句
    String display = "nihao";
    System.out.println(display); // result1 is "nihao"
    setString(display);
    System.out.println(display); // result2 is "nihao"在你上面的操作中,当你调用setString(display);编译器回吧display所指向的那个字符串的地址取出来,传递给函数。注意,字符串的地址并不等于display,这里,其实还是相当于传递了一个值,只不过这个值是字符串的地址。然后你在函数里面给这个地址值重新定向,对于display变量来说,肯定不会起作用阿。其实你可以这么理解,当你这么定义的时候,int a,那么变量a里面存放的是整数,当你String a的时候,变量a里面存放的并不是字符串,而是字符串的地址。
      

  3.   

    zhang21cnboy(事了抚衣去,不留身与名) 回答的很准确!祝你好运!
      

  4.   

    display是一个引用,str也是一个引用,原先str指向display,在setstring()中str则指向到一个新的string——“hello!”,但并没有改变display的引用。
      

  5.   

    Java中参数传递都是传值的。即便是传引用,也是传递的变量的值(对象的地址),总的来看,都是传递的变量的值而已。
      

  6.   

    zhang21cnboy(事了抚衣去,不留身与名)说得非常准确,没的说了!
      

  7.   

    class Datapassing
    {
    public static void main(String [] args)
    {   String display = "nihao";
        Datapassing a = new Datapassing();   
    void setString(){
                      display = "Hello!";
              }

            System.out.println(display); 
            a.setString();
            System.out.println(display);  }
    }
    我这样写为什么编译还是不过
    请高手指教!
      

  8.   

    好想这样能实现
    class Datapassing
    {    String display = "nihao";
         void setString(){
                      display = "Hello!";
              }
              void print(){
    System.out.println(display);
    }
    public static void main(String [] args)
    {   
        Datapassing a = new Datapassing();   
    a.print();
            a.setString();
            a.print();
    }
    }
    高手门我这样做对吗?
      

  9.   

    顺便问一下,如果这样定义:String display = new String("nihao");,结果是什么???
      

  10.   

    string类型好像具有持久性,产生了就不轻易改变
      

  11.   

    Java采用的是值传递
    需display是一个指向字符串变量的地址的变更。
    在子程序中只是将新的参数变量str的指向了一个新的字符串,但是该值是不会返回给display的。
      

  12.   

    zhang21cnboy(事了抚衣去,不留身与名) 你好。
    如果我想得到的结果是display="Hello!",那么除了用返回值以外(该种方法不好,如果返回2个参数的话会比较麻烦的),还有什么办法能解决这个问题呢?谢谢帮忙。
      

  13.   

    void setString(){
                      display = "Hello!";
              }
    是一个函数调用,当然在那不能编译过了
      

  14.   

    怎么搞的,怎么没有高手来帮忙解决这个问题
    Java采用的是不是值传递,是传引用,这是一个很基础的问题
    CSDN这么多人怎么连这都不知道楼主的程序帮您解释一下
    Public void setString(String str){
       //相当于str = new String("Helle"); (其实是有区别的,不过在这里可以认为是相同的)
       str = "Helle!"; 
    }这里new 了一个对象,所以呢...
    String 是不变模式实现的,所以,需要用别的对象来测试传引用
    JAVA中仅有几个对象是传值的,而您恰恰就选择了这个String(哈哈,当初我也是)可以改为任何一个对象,除了String等少数几个Object,几乎都可以
    Public void setString(StringBuffer str){
       str.append("Helle!");
       //如果 str = new StringBuffer("sdfsdf");当然不行
    }
    Public void setString(Vector str){
       str.add(""sdfsd");
       //如果 str = new Vector();当然不行
    }