public class TestString {
  public static void link(String a){
  a+="World";
  }
  
  public static void main (String args[]){
  String a = "Hello" ;
   link(a);
  System.out.println(a);
  }
}
输出为什么是“Hello”而不是“HelloWorld”

解决方案 »

  1.   

    原因:因为String类是一个不可变得对象;所以每次操作时都要重新创建一个新的对象;
          当执行a+="World";实际上是重新创建了一个新的对象;而本身的a对象是没什么变化的;所以输出
           System.out.println(a);结果为Hello;
     
      

  2.   

    两个a的作用范围是不一样的; public static void link(String a){
    a+="World";
      }
    这里的a的作用域在出了{}就没用了;
     public static void main (String args[]){
    String a = "Hello" ;
    link(a);
    System.out.println(a);
      }
    这里的a是在main函数这对{}中有用;
      

  3.   

    JAVA里都是值传递
    所以在别的方法内部是无法改变参数本身的值的
      

  4.   

    Java是值传递,link(a)只是把a这个变量的值传进去,并不改变a变量
      

  5.   

    那我要想输出“helloworld”怎么办啊
      

  6.   

    你自己debug下可以看到,link方法是执行了的,而且执行完a的值也变成了"HelloWorld",可为什么你在main方法中打印a的时候却还是"Hello"呢,原因很简单,link(a)返回的结果并没有给你mian方法中声明的a对象赋值,所以,写成a=link(a);,再看下
      

  7.   

    JAVA是值传递,传递的只是一个拷贝,不会改变本身
      

  8.   

    public class commonTest {
    public static String link(String a) {
    return a += "World";
    } public static void main(String args[]) {
    String a = "Hello";
    a = link(a);
    System.out.println(a);
    }
    }
      

  9.   

    public class TestString {
      public static String link(String a){
           a+="World";
           return a;
      }
       
      public static void main (String args[]){
    String a = "Hello" ;
    link(a);
    System.out.println(link(a));
      }
    }
      

  10.   

    public class TestString {
      public static String link(String a){
          a+="World";
          return a;
      }
       
      public static void main (String args[]){
          String a = "Hello" ;
          a=link(a);
          System.out.println(a);
      }
    }
      

  11.   

    JAVA是值传递,传递的只是一个拷贝,不会改变本身
    ---------------
    你试试InetSocketAddress