Java API_String原理分析

/**
 * 
 * String 表示一个字符串,内部使用字符数组,不能实现继承(最终类),不可变
 *
 */
public class StringDemo {
	public static void main(String[] args){
		//String 的两种赋值方式
		//1.直接赋值,推荐使用这一种
		String s1="粪粪";//在常量池
		//2.使用new关键字创建对象,new表示申请内存空间,生成两个对象
		String s2=new String("粪粪");//在堆里面
		String s3="粪粪";
		
		System.out.println(s1==s2);
		System.out.println(s1.equals(s2));
		System.out.println(s1==s3);
		
		//代码示例:4种情况分析:直接赋值字符串连接时,考虑编译期和运行期
		//如果在编译期可以被确定,那么久使用已有的对象,否则会创建新的对象
		System.out.println("---------第一种情况-----------");
		String a="a";
		String a1=a+1;//在堆中创建
		String a2="a1";//在常量池创建
		System.out.println(a1==a2);//false
		
		System.out.println("---------第二种情况-----------");
		
		 final String b="b";//这里b是常量,所以可以确定
		 String b1=b+1;	
		 String b2="b1";
		 System.out.println(b1==b2);//true
		 
		 System.out.println("---------第三种情况-----------");
		 String c=getC();
		 String c1=c+1;
		 String c2="c1";
		 System.out.println(c1==c2);//false
		 //方法在运行期执行
		 System.out.println("---------第四种情况-----------");
		 final String d=getD();
		 String d1=d+1;
		 String d2="di";
		 System.out.println(d1==d2);//false
	}
	private static String getC(){
		return "c";
	}
	private static String getD(){
		return "D";
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44117272/article/details/89478732