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

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

String詳解

2019-11-11 05:12:58
字體:
來源:轉載
供稿:網友

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并返回
上一篇:html轉義

下一篇:1091. Acute Stroke (30)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产在线精品一区二区夜色 | 日日狠狠久久偷偷四色综合免费 | 国产精品视频中文字幕 | 艹男人的日日夜夜 | 九一传媒在线观看 | 黄色香蕉视频 | 在线观看一区二区三区四区 | 国产美女自拍av | 日本黄色免费观看视频 | 欧美成人福利 | 97中文字幕第一一一页 | 日本黄色一级毛片 | av不卡毛片 | 毛片免费在线观看视频 | 日本精品久久久一区二区三区 | 视频一区二区视频 | 国产精选91 | 久久久久久久免费看 | 国产一级一片免费播放 | 久久这| 一级在线视频 | 北原夏美av| 蜜桃视频在线免费播放 | 蜜桃视频最新网址 | 99国产精品欲a | 成人一级免费视频 | 日韩视频一二区 | 亚洲欧美一区二区三区在线观看 | 国产www免费| 最近中文字幕一区二区 | 亚洲精品自在在线观看 | 一道本不卡一区 | 蜜桃传媒视频麻豆第一区免费观看 | 日韩视频在线视频 | 国产精品一区二区三区在线 | 色淫网站免费视频 | 久国产| 欧美中文字幕一区二区三区亚洲 | 成年人免费黄色片 | 欧美一级性 | 黄色小视频在线免费看 |