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

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

這種情況下,String類型之間==不是Ttue,而是False?

這種情況下,String類型之間==不是Ttue,而是False?

qq_控心_0 2017-08-24 22:46:18
//求解,那個false是為什么,難道不是比較的值嗎?public class Tese { public static void main(String[] args) { boolean a=function_1(); boolean b=function_2(); boolean c=function_3(); boolean d=function_4(); //結果都是true System.out.println(a); System.out.println(b); //反轉后結果應該是一樣的,然后用==和equals得出兩種結果,一個false ?一個true System.out.println(c); System.out.println(d); } public static boolean function_1(){ String a="a"; String b="a"; return a==b; } public static boolean function_2(){ String a="a"; String b="a"; return a.equals(b); } public static boolean function_3(){ String s="123321"; StringBuilder sb=new StringBuilder(s); String str=sb.reverse().toString(); return s==str; } public static boolean function_4(){ String s="123321"; StringBuilder sb=new StringBuilder(s); String str=sb.reverse().toString(); return s.equals(str); }}
查看完整描述

1 回答

已采納
?
天將明96

TA貢獻15條經驗 獲得超13個贊

首先說一下"=="和"equal"的區別

  • 對于基本類型的變量。"=="和"equal"的區別

    "=="對于基本數據類型,判斷兩個變量的值是否相等。"equal"不能用于基本數據類型。只能用于類變量。對于基本數據類型要用其包裝類。

  • 對于對象變量,"=="和"equal"的區別
    因為對象變量的存儲的是對象在內存中的路徑,即內存地址。所以用"=="比較時,即使對象的值相等,但是他們的內存地址不同,所以"=="的結果為false。故"=="用于比較兩個變量的值是否相等,而不是變量引用的對象是否相等。"equal"用于比較兩個對象是否相同。

  • "=="比較的是值【變量(棧)內存中存放的對象的(堆)內存地址】?
    "equal"用于比較兩個對象的值是否相同【不是比地址】

綜上所述:

String?s="123321";
StringBuilder?sb=new?StringBuilder(s);
String?str=sb.reverse().toString();

s和str有相同的值,但是它們的地址是不同的,所以s==str為false,s.equals(str)為true。

那你可能會問

String?a="a";
String?b="a";

這里的a和b為什么地址也一樣呢?這是因為常量池的緣故,編譯期能確定相同的字符串才會指向常量池中同一個字符串。通常由常量來初始化的字符串在編譯期就能確定,所以它們的地址也一樣。而function3中的str,在編譯期是不能確定它的值,所以地址與s不一樣。

至于什么是常量池,你可以在網上看別人的博客,會比我這里一兩句話要好理解得多。

如果滿足要求,望采納!<(?????)>

查看完整回答
1 反對 回復 2017-08-25
  • 那一年故鄉
    那一年故鄉
    在Object中equals方法是用來比較地址的,String類由于改寫了equals方法所以是比較內容了,equals方法默認情況下是比較地址的(當然只能用于非基本數據類型)
  • 天將明96
    天將明96
    好吧,謝謝啦!
  • qq_控心_0
    qq_控心_0
    感謝你的回答!是不是可以這樣理解,引用類型==是比較對象的內存地址,而前面的兩個因為賦的值是相同的,所以第二個變量直接指向了第一個的內存地址,所以==也就返回了true,而后面兩個內存地址根本就不一樣,也就回返回false咯。
點擊展開后面2
  • 1 回答
  • 1 關注
  • 1359 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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