a怎么可能变啊,c(a)只不过是把a的值传进去。
a的句柄没变化

解决方案 »

  1.   

    你把第二句写成a=c(a)就会变了。原因在于调用c(a)的时候只是把a的值传递给了c(String s)中的s,a本身没有任何改变,然后在c(String s)这个方法中,s的值变成了1111,返回这个值,即c(a)的值是1111,赋给b,b变成1111,整个过程中a一直没有变。
      

  2.   

    这个有什么奇怪的。你知道什么是local变量吗?
      

  3.   

    再请问大家一个问题, 怎么样通过传参数改变a的值 ?对于这个问题, 我的理解是,
    c(a), 由于java是引用传参数, 所以 s = “1111”; 就可以改变a的值, 不是吗?
      

  4.   

    我上贴的意思是, 写一个过程, void c ( ..... ) 
    {};调用 c(a), 改变a 的值 , 如果向大家所说, 好像没办法?
      

  5.   

    java对于基本数据型都是 传值 不是引用所以这里的 a 没有变
      

  6.   

    to  onefox(一品狐) ( ) ,呵呵, 老兄, 的确, java对于基本数据型都是 传值 不是引用
    但 String 可不是基本数据哦 :)
      

  7.   

    String 这个类比较特殊的原因
    其他的就不会有这样的情况了
      

  8.   

    对象是这样的!
    比如
     class B{
      int age;
      String name;  B(String s,int i){
       name=s;age=i;
       }
      void setData(String s,int i){
       name=s;age=i;
      }
      void bOut(){
        System.out.println(name+"   "+age);
      }
    }
    public class A {   public static B c(B s ) {
          s.setData("牛比",1000);
        //  s.age=100;s.name="牛比";
          return s;
       }   public static void main(String[] args){
           B testB =new B("zhj",100);
           B testBtemp;
           testB.bOut();
           
           testBtemp=A.c(testB);//return s;s 的值给了testBtemp,注意!
           System.out.println("testB 已被改变!");
           testB.bOut();
           testBtemp.bOut();
       }
    }
      

  9.   

    调用参数引用是针对对象(实例)而言的!String 比较特殊!public static B c(B s ) {
          s.setData("牛比",1000);
           return s; 
         //下面s 的值给了testBtemp,注意!而不是给了testBtemp,我估计你理解错了!
       }testBtemp=A.c(testB);//return s;s 的值给了testBtemp,注意!
      

  10.   

    看这一段代码,就明白了。
    //Integer.toHexString(s.hashCode())是对象的地址。public class a {   public static String c(String s ) {
          s = "1111";
          System.out.println("@s="+Integer.toHexString(s.hashCode()));
          return s;
       }   public static void main(String[] args){
           String a = "123456";
           System.out.println("@a="+Integer.toHexString(a.hashCode()));
           String b = c(a);
           System.out.println("@b="+Integer.toHexString(b.hashCode()));
           System.out.println("@a="+Integer.toHexString(a.hashCode()));
           System.out.println(a);
           System.out.println("@a="+Integer.toHexString(a.hashCode()));
       }
    }
      

  11.   

    我的打印结果是
    @a=56760663
    @s=170440
    @b=170440
    @a=56760663
    123456
    @a=56760663可见a把自己的地址传入c方法,因为是传值,所以a的地址不会发生变化。