亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

你好,關于"equals"和"=="的區別?小白求解!

你好,關于"equals"和"=="的區別?小白求解!

烙印99 2021-05-12 14:11:13
public class ckeef{ public static void main(String args[]){ String s1,s2,s3,s4;s1=new String("we are students");s2="We are students";s3="We are students";s4=new String(s1);System.out.println(s1.equals(s2)); System.out.println(s3==s2);//s2和s3為什么是對的??System.out.println(s1.equals(s4)); System.out.println(s1==s4);//s1和s4的引用不是一樣的么?為什么輸出的是false??}}菜鳥求解?。。。。。?
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

這個確實是容易引起混亂的,讓人疑惑的。
關鍵在于,你要理解s1=new String("we are students");
s2="We are students";
這兩個是不一樣的,new是用新建一個對象的方法,而后一種是放在常量池中的。你一下次再用這種方法去創建的時候,就會去常量池里面找,所以
s2="We are students";
s3="We are students";
這兩個是相同的,指向常量池中的"We are students";
而s1=new String("we are students");
s4=new String(s1);
這兩個是不同的對象,盡管他們的內容是一樣的。
就像有兩個人,他們的名字是相同的,但是并不是一樣的人。
希望能幫到你。

查看完整回答
反對 回復 2021-05-23
?
米脂

TA貢獻1836條經驗 獲得超3個贊

public class ckeef

{ public static void main(String args[])

{
String s1,s2,s3,s4; // 定義4個引用,但未指向任何對象。

s1=new String("we are students"); //將引用s1指向新生成的string對象

s2="We are students";
/*將“We are students”字符串常量引入常量池,
并使得s2指向它。

*/

s3="We are students";
/*根據常量池存儲機制,發現常量時,先搜索常量池,在該常量存在的情況下, 不會新建立一個常量來儲存它,所以,s2和s3指向同一個常量“we are students”。*/

s4=new String(s1); //新建一個String使用s1內容構造,并用s4指向它。

System.out.println(s1.equals(s2));

System.out.println(s3==s2);//s2和s3為什么是對的??
/* S3和S2指向同一個常量,當然s3==s2,==運算符就是比較2個引用是否指向同一個 對象
*/

System.out.println(s1.equals(s4));

System.out.println(s1==s4);//s1和s4的引用不是一樣的么?為什么輸出的是false??
/*
只要new了一次,就會產生一個新的對象,所以s1和s4都產生了一個新的對象
并不是指向同一個對象的引用,而他們的string對象中的值是“we are students”常量,
String.equals()方法,會比較這個是否相等,但==是比較他們是否指向同一個
對象。

*/

}

}


查看完整回答
反對 回復 2021-05-23
  • 2 回答
  • 0 關注
  • 351 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號