亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: 大馬虎
打印 上一主題 下一主題

java的判斷對象相等的兩個問題 [復制鏈接]

論壇徽章:
0
11 [報告]
發(fā)表于 2006-04-05 15:44 |只看該作者
原帖由 艾斯尼勒 于 2006-4-5 15:40 發(fā)表



情看摟上我的解釋,都應該是返回true的,您可以寫個程序實驗一下

還是作個試驗好 不過我感覺第一種情況是true 第二種是false

論壇徽章:
0
12 [報告]
發(fā)表于 2006-04-05 16:03 |只看該作者
。。你們回帖子。都不先自己試一下的么?

總之每次我都自己先試一下。確保沒有錯誤才回復。。。


  1. package source;

  2. public class TestString {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO 自動生成方法存根
  8.                
  9.                 String a = new String("Hello World");
  10.                 String b = "Hello World";
  11.                 String c ="Hello World";
  12.                
  13.                 //*
  14.                 if(a.equals(b)){
  15.                         System.out.println("a equals b");
  16.                 }else{
  17.                         System.out.println("a no equals b");
  18.                 }
  19.                 if(a==b){
  20.                         System.out.println("a == b");
  21.                 }else{
  22.                         System.out.println("a != b");
  23.                 }
  24.                 if(c.equals(b)){
  25.                         System.out.println("c equals b");
  26.                 }else{
  27.                         System.out.println("c no equals b");
  28.                 }
  29.                 if(c==b){
  30.                         System.out.println("c == b");
  31.                 }else{
  32.                         System.out.println("c != b");
  33.                 }
  34.         }
復制代碼


輸出

a equals b
a != b
c equals b
c == b

論壇徽章:
0
13 [報告]
發(fā)表于 2006-04-05 16:04 |只看該作者
樓上的好同志

論壇徽章:
0
14 [報告]
發(fā)表于 2006-04-05 16:08 |只看該作者
原帖由 tong0245 于 2006-4-5 15:44 發(fā)表

還是作個試驗好 不過我感覺第一種情況是true 第二種是false


嗯,第二種的確是false,不過hashCode是一樣的。奇怪阿奇怪

論壇徽章:
0
15 [報告]
發(fā)表于 2006-04-05 16:12 |只看該作者
我也是通過程序驗證才知道結果的,不過不太清楚原因,我想通過String a="Hello world !"; 方式聲明的變量在棧上分配的,String a="Hello World !" ; String b ="Hello World !"; 其實都是指向了棧里相同的一個地址即在棧里的"Hello World !" ,而String c =new String("Hello World !");是在堆里分配的所以c !=b 不知道是不是這個原因。

論壇徽章:
0
16 [報告]
發(fā)表于 2006-04-05 16:14 |只看該作者


不討論了。這個屬于JVM的范疇。有興趣可以找點資料看看。忘記那有中文的了。講的還不錯。

[ 本帖最后由 carset 于 2006-4-5 16:17 編輯 ]

論壇徽章:
0
17 [報告]
發(fā)表于 2006-04-05 16:16 |只看該作者
原帖由 carset 于 2006-4-5 16:03 發(fā)表
。。你們回帖子。都不先自己試一下的么?

總之每次我都自己先試一下。確保沒有錯誤才回復。。。



呵呵。我以前試過的,不過還是把結果記錯了。


  1. public class Equal
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String a = new String("ABC");
  6.                 String b = "ABC";
  7.                 System.out.println(a.hashCode());
  8.                 System.out.println(b.hashCode());
  9.                 System.out.println(a==b);
  10.         }
  11. }
復制代碼

返回結果是false,但hashcode是相同的,應該是同一個地址吧。String重寫了hashCode()?

[ 本帖最后由 艾斯尼勒 于 2006-4-5 16:19 編輯 ]

論壇徽章:
0
18 [報告]
發(fā)表于 2006-04-05 16:18 |只看該作者
String.hashcode();


  1.   public int hashCode() {
  2.         int h = hash;
  3.         if (h == 0) {
  4.             int off = offset;
  5.             char val[] = value;
  6.             int len = count;

  7.             for (int i = 0; i < len; i++) {
  8.                 h = 31*h + val[off++];
  9.             }
  10.             hash = h;
  11.         }
  12.         return h;
  13.     }

復制代碼

論壇徽章:
0
19 [報告]
發(fā)表于 2006-04-05 16:24 |只看該作者
因為Java的hashCode()有要求,當equals()調(diào)用返回true時,兩者
的hashCode()必須相同^_^

論壇徽章:
0
20 [報告]
發(fā)表于 2006-04-05 16:26 |只看該作者
原帖由 carset 于 2006-4-5 16:18 發(fā)表
String.hashcode();



嗯,的確是重寫了,為內(nèi)容相同的對象返回相同的值,為了equals方法能返回想要的結果
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP