public class Hello {
    public static void main(String[] args) {
        String s = "123";
        System.out.println(s);
        m1(s);
        System.out.println(s);        int i = 123;
        System.out.println(i);
        m2(i);
        System.out.println(i);
    }    private static void m1(String s) {
        s = "321";
    }    private static void m2(int i) {
        i = 321;
    }
}

解决方案 »

  1.   

    那m1? m2?的作用是什么呀?
    m1? m2?是不是没有输出任何东西呀!
      

  2.   

    结果都是123 
     m1(s); 只是将s 的引用传过去了,而方法 m1(s); 将m1中参数s的引用该为“321”执行之后都释放掉了,而原来的s还是指向“123”没有改变,下面的类同,要想改变s应该用set方法
      

  3.   

    结果都是123
    将m1中参数s就原来的s不指向同一个地址。原来的s的没有改变过。
      

  4.   

    String 的值的永远不会被改变,它是final对象。
      

  5.   

    如果你把String改成StringBuffer的话,结果就会不同,因为StringBuffer是可以改变的
      

  6.   

    答案应该是:
    123
    321
    123
    123吧!
    string 为引用类型
    int 是值类型
      

  7.   

    都是123!
    分析其内存:
    String s ="123"
    在栈里有个String类型变量s,在共享池里有对象"123",
    s引用指向"123";
    执行m1(s)方法时,这时也在栈里有另一个s(不同于mai()方法里的),其先指向
    "123",然后来指向"321";此方法结束后,此引用s也消失。
    所以打印的s还是mai()方法里的s="123";
      

  8.   

    m1(s); // 只是传过去了s引用的对象地址,而String又不允许修改,所以完成后,没有任何变化
    如果不是String,比如
    class TestObject {
      public String version = "1";
    }//
    TestObject s = new TestObject();
    System.out.println(s.version);
    ml(s);
    System.out.println(s.version);
    ...void ml(TestObject s){
     s.version="2";
    }此时 s 对应的对象就被修改了,输出:
    1
    2
      

  9.   

    关于m1,13楼正确,
    m2 因为int是简单类型,作参数时是值传递,不可能因为作参数而改变原来的值。这个大家都对