String常量池


面试题:String到底创建了几个?

	String s1 = new String("hello");
	String s2 = new String("hello");
	/**
	 * 	s1创建了两个对象,new String在堆中,然后引用着在常量池中创建"hello"区域。
	 * 	而s2,只创建一个对象,就是堆的new String();因为常量池已有hello存在,所以便直接引用
	 */
	System.out.println(s1==s2);//false;			
	System.out.println(s1.equals(s2));//true  
	System.out.println("*************************");
	String s3 = new String("hello");
	String s4 = "hello";
	System.out.println(s3==s4);//false		s3引用着堆,在引用着在常量池创建的"hello",s4 直接引用的已在常量池存在的hello,但它们地址值不相同。
	System.out.println(s3.equals(s4));//true
	System.out.println("*************************");
	String s5 = "传智";
	String s6 = "传智";
	System.out.println(s5==s6);//true  //当s6赋值时,发现常量池中有"传智",就直接引用了它。所以s5与s6指向同一个地址值。	
	System.out.println(s5.equals(s6));//true
	s5.substring(0, 1);//截取字符,是没有修改s5的值,而是将截取的值,又在常量池中开辟一块空间存储。目前没有被变量所引用。
	System.out.println(s5.equals(s6));//true 
	System.out.println("*************************");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值