String s1 = new String ;String s2 = new String ();表示创建了两个对象,没有初值,所以默认为空null;
而s1==s2,这是在比较它俩的内存地址,并不是比数值,所以它俩并不想等,开辟的空间不一样,所以boolean b3 = (s1 == s2);是false;
如果比较数值的话是这样比较: s1.equals(s2);
public String()初始化一个新创建的 String 对象,使其表示一个空字符序列。注意,由于 String 是不可变的,所以无需使用此构造方法。 API中的原话
int i=4,int j=4,是值类型, 存储在堆中,所以 i=j ,即b1=true、b2=false
s1和s2是string类型,即为引用类型, s1和s2不能用==比较,所以,b3=false,b4=false
这道题考查的是值类型和引用类型的区别:值类型, 存储在堆中,比较的是值,所以可以用==来比较;引用类型,在栈中,比较的地址,应用.equals()方法比较。
String:字符串类
String s1 = new String (); String s2 = new String ();创建了两个字符串实例,s1和s2分别为引用变量,其值为实例在内存中的首地址,二者不等。
建立类实例