java支持两种常见的方法创建字符串

String s1 = new String("abc");
String s2 = "abc";

两种方法都有什么区别呢 内存图如下

 

wKiom1aCeXWR6kguAAFwKLLRhwQ083.jpg

1,S1首先查看字符串 abc 是否存在字符串常量池中,如果存在则直接指向,不存在,则创建一个

2,S2 查看常量池中 abc 是否存在,结果已经存在了,就直接指向引用了


区别

    前者s1 创建了两个对象 堆内存中的new String 和 字符串常量区的 abc

    s2只创建了一个对象 abc 如果存在 abc 那就一个对象也没创建



同时 String s = "abc";

字符串 abc作为一个对象也可以调用String类的方法