首页 > 代码库 > String常量池
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("*************************");
String常量池
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。