对String类的理解

String   s= "Hello ";当jvm看到 "Hello ",在string池建立string对象存储它,并将他的引用返回给s。 
s= "Java ",当jvm看到 "Java ",在string池建立新的string对象存储它,再把新建的string对象的引用返回给s。而原先的 "Hello "仍然在string池内。没有消失,他是不能被修改的。 

因此咱们仅仅是改变了s的引用,而没有改变他所引用的对象,由于string对象的值是不能被修改的。 html

String s="hello";String   s1= "Hello ";jvm首先在string池内里面看找不找到字符串 "Hello ",找到,返回他的引用给s1,不然,建立新的string对象,放到string池里。这里因为s= "Hello "了,对象已经被引用,因此依据规则s和s1都是引用同一个对象。因此   s==s1将返回true。(==,对于非基本类型,是比较两引用是否引用内存中的同一个对象) 

String   s2=String( "Hello ");jvm首先在string池内里面看找不找到字符串 "Hello ",找到,不作任何事情,不然,建立新的string对象,放到string池里面。因为遇到了new,还会在内存上(不是string池里面)建立string对象存储 "Hello ",并将内存上的(不是string池内的)string对象返回给s2。因此s==s2将返回false,不是引用同一个对象。 
转自:https://www.cnblogs.com/dangzhenjiuhao/p/4585389.htmljvm