麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

String詳解

2019-11-11 06:03:20
字體:
來源:轉載
供稿:網友

String作為java常用的類,這里深入解析一下這個類的一下操作情況。

這里做的比較都是內存里的地址,因此我們認識幾個感念。

(stack)存放基本數據類型的值與引用數據數據類型的引用地址。

(heap)存放引用數據類型的對象,即new的對象都放在這里。

方法區(Method Area)我們這里講的stringpool(常量池)放在這里

equals方法和==的區別:

==用來比較基本數據類型的值是否相等,若是引用類型則判斷引用的堆(heap)存儲的地址是否相同。

equals通常用來比較基本數據類型的值或者引用類型的內容是否相同,比較還是基于他們在內存中的存放位置的地址值。

先來說說equals方法:

超類Object中有這個equals()方法,該方法主要用于比較兩個對象是否相等。

public boolean equals(Object paramObject) { return this == paramObject; }

由此可見Object比較的還是內存引用地址是否相同。

String類與其他類對equals進行了覆寫

public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }

如果引用地址相同返回true,否則判斷字符串是否相同。

下面主要說說==方法

這里就要用到上面說的內存里面的地址了,先看幾個例子

String a = new String("張三");//堆內存中會產生一個“張三”的對象,棧中是a的引用對象 String b = new String("張三"); String n = "張三";//先判斷常量池中是否有“張三”這對象,沒有就new一個,棧中放的是n的對象 String m = "張三"; System.out.PRintln(a==b);//false System.out.println(n==m);//true System.out.println(a==n);//false

這里寫圖片描述

String的+操作

當+的兩邊都是字面值常量(引用常量池的對象不算)時,+完后會先判斷常量池中是否有這個字符串,沒有再new。

如果+兩邊有一個不是字符串,則直接是在堆內存中new一個對象。

String s = "hello world"; String x = "hello "+"world"; String world ="world"; String y = "hello "+world; System.out.println(s==x);//true 在常量池中找 System.out.println(s==y);//false 直接在堆中new

String的concat方法拼接字符串

public String concat(String str) { int otherLen = str.length(); if (otherLen == 0) { return this; } int len = value.length; char buf[] = Arrays.copyOf(value, len + otherLen); str.getChars(buf, len); return new String(buf, true); }

這里是將拼接的字符串在堆中new了一個出來。

String對象的intern()方法返回的是常量池的引用地址,沒有則創建一個返回

String s = new String("abc"); String s1 = "abc"; String s2 = new String("abc"); System.out.println(s == s.intern());//false s.intern()在常量池中創建一個abc并返回 System.out.println(s1 == s1.intern());//true s1引用的本身就是常量地址 System.out.println(s.intern() == s2.intern());//true s與s2引用的常量地址相同 System.out.println(s2 == s2.intern());//false s2.intern()在常量池中創建一個abc并返回
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 爱操视频 | 99麻豆久久久国产精品免费 | 国产免费成人 | 久久精品探花 | 亚洲最新黄色网址 | 中国女人内谢69xxxx天美 | 国产va在线观看免费 | 暖暖免费观看高清完整版电影 | 国产五区 | 久久成人在线观看 | 看毛片免费 | 在火车上摸两乳爽的大叫 | 鲁人人人鲁人人鲁精品 | 久久精品免费国产 | 国产资源在线观看视频 | 国产精品a一 | 日韩视频在线观看免费视频 | 亚洲精品一区二区三区免 | 深夜福利久久久 | 精品一区二区三区网站 | 中国妞xxxhd露脸偷拍视频 | 一级黄色毛片子 | hd性videos意大利复古 | 日日草日日干 | 欧美四级在线观看 | 中文字幕激情视频 | 国产精品一区在线观看 | 成人一级视频在线观看 | 成人在线视频在线观看 | 深夜免费福利视频 | 国产精品久久久久久久午夜片 | 日韩av手机在线免费观看 | 99亚洲| 91久久国产综合精品女同国语 | 亚洲最黄视频 | 成人不卡 | 一级黄色欧美 | 黄色免费不卡视频 | 精品在线观看一区二区三区 | 欧美日韩亚洲国产精品 | 海外中文字幕在线观看 |