java String 和 StringBuffer初始化疑问

String 用字符串作为初始值,而StringBuffer不行?
例如可以这么定义
String a ="abar";
但不可以这么定义
StringBuffer b = "adbc";
只能这么定义StringBuffer b = new StringBuffer("adbc");
恳请各位老师解答。谢谢。

阅读 3.2k
2 个回答

对象都可以用new的方式,只不过String或者数组这些,多了一些初始化的方式而已.

对楼上的答案稍微补充一点吧,为什么基础数据类型(String不是基础数据类型)可以不用new的形式实例化一个对象。主要原因有两个,一个是因为快,可以被优化,另一个是因为方便(被大量的使用),增加代码可读性。
比如String a = "a",String b = "a", 因为String类有个本地方法会检测此字符串存不存在在常量池,所以a==b为true。反之new出来的就会为false。

好了,以上点到为止。如果题主仍有兴趣了解下去的话,可以百度一下java的自动装箱拆箱机制,大致看一下,可以对java理解的更深一些。
最后再贴一道题:
int a = 1;
Integer b = 1;
Integer c = Integer.valueOf(1);
Integer d = new Integer(1);
请问打印 abcd两两互相 == 输出什么。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题