两个简单对象的问题。

String str = “abc”; String str = new String(“abc”); 前面那个str创建对象为什么不需要new,“abc”是怎么给了str?后面的“abc”给了谁?

都只是指向对象的地址。

第一个生成一个对象 abc 你想喝水 给你个杯子
第二个生成两个对象 new String , abc 你想喝水 该你装满水的杯子

一般情况 String不需要new StringBuffer需要

其他语言不知道,C++是创建位置不同,前者在栈上,后者在堆上。
前者也就相当于临时变量,离域就pop,后者生存期长得多,只要没delete,并且指向它的指针还在你手里,就随时能用(指针丢了就内存泄露了,所以推荐用智能指针)。
不过这应该不是C++,算我强答了。

String str 只是创建了引用,String str =“abc”; str的值是在编译期确定的值,“abc”会放到常量池。New String("abc");在编译期无法确定值,不会放到常量池。有自己的地址空间。

str是引用,存在栈中;
而String str = "abc"; "abc"存在常量池;str指向常量池中的"abc";
String str = new String("abc"); "abc"对象是new出来的,存在堆中;str指向堆中的"abc";

上传不了图片;要不然画图很清晰的。