首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

有关问题:关于别名效应

2012-02-23 
问题:关于别名效应首先我想先问一下:StringanewString( abc ),StringbnewString( abc )a和b不相等这

问题:关于别名效应
首先我想先问一下:
String   a   =new   String( "abc "),String   b   =new   String( "abc ")   a和b不相等这我知道,为什么
String   a= "abc ",String   b= "abc "   a和b相等呢,有什么不一样啊?

关于别名效应:
public   class   Alias   {
                            private   int   i;
                            public   Alias(int   ii)   {   i   =   ii;   }
                            public   static   void   main(String[]   args)   {
                            Alias   x   =   new   Alias(7);
                            Alias   y   =   x;   //   Assign   the   reference
                            System.out.println( "x:   "   +   x.i);
                            System.out.println( "y:   "   +   y.i);
                            System.out.println( "Incrementing   x ");
                            x.i++;
                            System.out.println( "x:   "   +   x.i);
                            System.out.println( "y:   "   +   y.i);

                        }      
}
结果是:x:7
                y:7
                x:8
                y:8
这就是别名效应,y=x后,改变x的内容,y也改变
按我的理解   以下代码:
public   class   Alias   {
public   static   void   main(String[]   args)   {
          String   a   =new   String( "abc ");
          String   c   =   a;

            System.out   .println(a);
          System.out   .println(c);
        a=   new   String( "sdf ")   ;
          System.out   .println(a);
          System.out   .println(c);
  }
}
结果应该是:abc
                        abc
                        sdf
                        sdf
因为String   也是个对象啊,但结果是:
                        abc
                        abc


                        sdf
                        abc
请问是为什么啊?

[解决办法]
1.String 有一个常量池

当通过String str = "sss " ;这种方式创建一个 "sss "对象后,会在常量池里面把这个对象
存储起来,以后再通过这种方式声明对象时,会不再生成新的对象,直接把常量池的对象赋给这个引用

2. a 指向另外了一个对象 但是c仍然指向原来的对象

自己画个图理解一下

热点排行