呵呵,道理很简单,资源浪费的问题,String s其实是一个引用,而"erwew"则是一个String对象,现在你用s指向了这个对象,而当你是String s = new String("erwew")时,你会又重新创建一个和erwew一样内容的全新的String对象和"erwew"这个String对象,造成了资源的浪费
String str = "xxx"是先查找有没有xxx这个字符串,如果有的话就让srt引用,所以有可能多个String类型的变量引用同一个字符串; 而String str = new String()是独立的,每次都新开一个对象。 另外一方面理解,String str = "xxx"是从栈里开变量,多个变量(对象)之间可以共享,先把xxx放进栈里面,如果系统发现已经有xxx了,再把str放进来,以后也是,如果发现没有你所要创建的字符串(即值)才把该串放进栈里,然后再把对象放入栈中;而String str = new String()是在堆里开,是相互之间独立的,互不影响,不会共享一个对象。 根据变成的需要这两种创建字符串的方式各有好处,当然,还有一种不错的方式就是StringBuffer,建议查阅资料。
另外一方面理解,String str = "xxx"是从栈里开变量,多个变量(对象)之间可以共享,先把xxx放进栈里面,如果系统发现已经有xxx了,再把str放进来,以后也是,如果发现没有你所要创建的字符串(即值)才把该串放进栈里,然后再把对象放入栈中;而String str = new String()是在堆里开,是相互之间独立的,互不影响,不会共享一个对象。
根据变成的需要这两种创建字符串的方式各有好处,当然,还有一种不错的方式就是StringBuffer,建议查阅资料。
1、一个是yuwenbao所说的浪费资源的问题
2、因为String十分常用,简化语法