String 详解

package cn.it.test;


public class TestMain {


	/**
	 * @param args
	 */
	public static void main(String[] args) {
	
		test2();


	}
	
	public static void test2(){
		String s1 = "a";//判断先常量池有没有“a",如果没有创建一个对象放到常量池(栈),并用s1指向这个对象;如果有用s1指向已有这个对象
		String s2 = s1 +"b";//相当 于基于s1内容new stringBuffer,再append("b"), 再toString()变成String对象,使用s2指向这个对象(堆)
		String s3 = "a"+"b";//直接把"a"+"b"拼接成”ab",判断先常量池有没有“ab",如朵没有创建一个对象放到常量池(栈),并用s3指向这个对象;如果有用s3指向已有这个对象
		String s4 = new String("a").intern();//他把常量池(栈)的“a” 拿出来比较
		String s5 = "abc".substring(0,1);//截取“abc"中的"ab" ,等同于 在new 一个string ”ab“
		
		System.out.println(s2=="ab");//false
		System.out.println((s2==s3));//false
		System.out.println(s3=="a"+"b");//true
		System.out.println(s4==s1);//trun
		System.out.println(s5==s3);//false
		
		System.out.println(s2.equals("ab"));//true
		System.out.println(s2.equals(s3));//true
		System.out.println(s3.equals("a"+"b"));//true
	}
	
	public static void test1(){
		/*
		 * 判断先常量池有没有“a",
		 * 如果有没有,创建一个对象放到常量池(栈),并用s1指向这个对象
		 * 如果有,直接用s1指向这个对象
		 * 这样好处,可以复用
		 */
		String s1 = "a";
		/* 下边的代码
		 * 判断先常量池有没有“a",
		 * 如果有没有,创建一个对象放到常量池(栈),并在的堆内存创建一个对象,y1指向这个对象;
		 * 如果有,在的堆内容创建一个对象,y1指向这个对象;
		 */
		String y1 = new String("a");
		
		/*
		 * equals和==的区别
		 * equals用来比较内容是否一样
		 * ==用来比较是否是同一个对象
		 */
		System.out.println(s1.equals(y1));//true
		System.out.println(s1==y1);//false
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值