【String】一些关于String的面试题目

请参考链接

这个链接实在是太干货了! https://www.cnblogs.com/xiohao/p/4296088.html

代码
public class String03 {
	public static void main(String[] args) {
		System.out.println("一些关于 String的面试题目");
		
		String str1 = "abc";
		String str2 = "abc";
		
		System.out.println(str1 == str2); //true "abc"字符串放在常量池中, 所以str1与str2指向的是同一个内容
		System.out.println(str1.equals(str2)); //true
		
		String str3 = new String("1234"); 
//创建了几个对象?? 创建了2个对象    1、在常量池中看是否有 "1234" 没有的话创建
//2、在堆中创建 new String() 指向常量池中的字符串
//在栈中 String str3指向堆中的 new String()
// 栈 --> 堆 --> 常量池
		
		String str4 = "1234";
		System.out.println(str3 == str4);	
//false   str3 :  栈 --> 堆 --> 常量池,此处 str4记录的是堆内存中对象的地址值
// str4:  栈 --> 常量池  所以地址值不一样, 此处str3记录的是常量池中的地址值
		System.out.println(str3.equals(str4));//true
		
		String str5 = "abc";
		String str6 = "a" + "b" + "c";
		System.out.println(str5 == str6); //true java中有常亮优化机制  所以指定的是常量池中同一个字符串
		
		String str7 = "ab";
		String str8 = "abc";
		String str9 = str7 + "c";
		System.out.println(str8 == str9); 
//false  str9属于字符串串联,是通过StringBuilder或者StringBuffer类以及append实现的
//即 str9指向的是堆内存	str8指向的是常量池
	}
}
总结的太渣了,还是看上面的链接吧

你可能感兴趣的:(【String】一些关于String的面试题目)