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 } }
String 详解
最新推荐文章于 2024-05-17 08:47:34 发布