String pool的测试和方法中String对象的测试

package StringTest.equalTest;
/**
 *
 * <p>Description:测试 string pool </p>
 * <p>Company: sinosoft</p>
 * @author 黄大洋
 * @date 2014-8-26
 *
 */

public class equalTest {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println("start");
  String a = "abc";
  String b = "abc";
  System.out.println(a ==b); //true
  
  //一个对象,默认不放到String池中
  String c1 = new String("aaa");
  String c2 = "aaa";
  System.out.println(c1==c2); //false
  
  
  //一个对象,默认不放到String池中
  String c3 = new String("bbb").intern();
  String c4 = c3.intern();
  String c5 = "bbb";
  System.out.println("c3==c4:"+(c3==c4)); //true
  System.out.println("c3==c5:"+(c3==c5));//true
  
  //两个对像
  String d1 = new String("ddd");
  String d2 = new String("ddd");
  System.out.println(d1 == d2); //false;
  
  
  //关于操作
  String zz1 = "zz1";
  String b1 = "zz";
  String cc1 =b1+"1";
  System.out.println(zz1==cc1); //变量+常量 ,false带十号重新创建一个new String
  
  //关于操作
  String yy2 = "yy2";
  String b2 = "yy";
  String zz = "2";
  String cc =b2+zz;
  System.out.println(yy2==cc); //false 变量+变量 ,带十号重新创建一个new String
  
  String yy3 = "xx3";
  //String b3 = "xx";
  //String dd = "3";
  String ee ="xx"+"3";
  System.out.println(yy3==ee); //true 常量+常量,jvm优化成一个常量。
  
  //自加
   String  a1 ="abcd";
      String a2  ="abcd";
      String a3 ="ab";
      a3+="cd";   //abcd
      System.out.println(a1==a2);   //true 
      System.out.println(a3==a2);   //false 自加,变量加长量
 }

}

 

总结:

方法中的String常量是放在Stirng pool中的,

关于有+操作符的。自加,和加,只要表达式中产生有变量,则运算的结果是个new String,

如果两个String常量相加,通过反编译,可以看到译器有个优化。把两个常量相加变成了一个常量。

gc:回收 结果new String的方法执行完后,可回收。常量将放在String 对象池中。

 

反编译class:

package StringTest.equalTest;

import java.io.PrintStream;

public class equalTest
{
  public static void main(String[] args)
  {
    System.out.println("start");
    String a = "abc";
    String b = "abc";
    System.out.println(a == b);

    String c1 = new String("aaa");
    String c2 = "aaa";
    System.out.println(c1 == c2);

    String c3 = new String("bbb").intern();
    String c4 = c3.intern();
    String c5 = "bbb";
    System.out.println("c3==c4:" + (c3 == c4));
    System.out.println("c3==c5:" + (c3 == c5));

    String d1 = new String("ddd");
    String d2 = new String("ddd");
    System.out.println(d1 == d2);

    String zz1 = "zz1";
    String b1 = "zz";
    String cc1 = b1 + "1";
    System.out.println(zz1 == cc1);

    String yy2 = "yy2";
    String b2 = "yy";
    String zz = "2";
    String cc = b2 + zz;
    System.out.println(yy2 == cc);

    String yy3 = "xx3";

    String ee = "xx3";
    System.out.println(yy3 == ee);

    String a1 = "abcd";
    String a2 = "abcd";
    String a3 = "ab";
    a3 = a3 + "cd";
    System.out.println(a1 == a2);
    System.out.println(a3 == a2);
  }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值