c++将int转换成string_Integer与int的区别 (== 与 equal)
Integer與int的區別 (== 與 equal)
先來看下Java中的8種基本類型和3種引用數據類型
8種基本數據類型:boolean byte int char long short float double
3種引用數據類型: 類 數組 接口
Java是面向對象的編程式語言,主要用類來表達,但是,為了方面,要用到基本數據類型。但是,最終的實現還是要依靠類來實現的。
說白了Integer就是int的封裝類,與之相應的是,其他幾種基本類型對應的封裝類分別是
這里面有很多的東西,我們就只是選擇int和Integer說明解釋下就行,其他的讀者可以自行去參考java的jdk參考文檔,這里講解的過程中,我們會同時說明下== 和 equal 的區別
首先來看看基本數據類型的存儲方式
基本數據類型的存儲原理:所有的簡單數據類型不存在“引用”的概念,基本數據類型都是直接存儲在內存中的內存棧上的,數據本身的值就是存儲在棧空間里面
java中對象怎么存儲的,我們應該清楚,new開辟內存空間進行存儲,每new一次就開辟一次。
int定義時默認值時0,但是 Integer默認值時null
接下來我們根據具體的操作來判定
Integer i = 124 Integer j = 128 //注意,這里基本數據類型的表示是有差別的在內存中,對于int基本類型的數據,會有一個緩存,-128~127,也就是說,我們對Integer直接賦予字面值的時候,如果值在這個區間內,不會開辟新的空間,會直接進行賦值。同樣,我們知道在Java中,對象的引用要么是賦予另一個引用,要么就是new一個實例出來,那這里在Java中是怎么實現的呢?在編譯Integer i = 124的時候,會翻譯成Integer i = Integer.valueOf(124)這里我們能看出來,是調用Integer的一個靜態方法,接下來我們來看下源碼是怎么樣的吧: 怎么來看源碼呢?不會的話我說下吧,針對idea,雙擊shift鍵,輸入要查找的源碼,進去查看就行了。
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}看到這里我們就很清楚了吧,超出這個緩存區的值,就要重新去開辟一塊新的空間。用代碼來檢驗一下吧
Integer i = 120; Integer j = 120; System.out.print(i==j) //顯示true Integer i = 128; Integer j = 128; System.out.print(i==j) //超過這個值,顯示true換一種話來說,這個過程就是將基本數據類型封裝成對象引用的數據類型,也就是裝箱。那么既然有裝箱,肯定有拆箱,是怎么來拆的呢?什么情況下需要拆呢?既然是數據,那么肯定是會有如+ - * /的之類的計算的,也就是說,在進行計算的時候,會隱式的轉換成基本數據類型進行計算。
基本性質的東西講完了,我們來看看==和equal之間的關系吧,
首先講一下基本的,== 對于基本數據類型來講,就是比較值是否相等,對于對象的引用,那就是比較地址是否相等。equal是比較內容,也就是存放在地址中的值是否相等。來看看Integer的equal方法的源碼。
public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}很清晰,很明了吧。接下來看看一些例子幫助理解吧
Integer i = new Integer(120); Integer j = new Integer(120); System.out.print(i==j) //false System.out.print(i.equal(j)) //true除了上面的幾種類型可以直接賦予字面值,還有一個我們常用的String類,也是可以直接賦予的,這里我們補充講解下吧。上測試代碼
String s1 = "hello";String s2 = "hello";String s3 = new String("hello");System.out.println(s1==s2); //trueSystem.out.println(s1==s3); //falseSystem.out.println(s1.equals(s3)); //true怎么來解釋呢?我們要明確一個概念,叫做***字符串緩沖池***。什么意思呢,就是說我們在創建s1的時候,會將這個字符串放到緩沖池中,當我們用同樣的形式去創建s2的時候,他會直接去緩沖池里面去找,并把地址的引用賦過來,那么s3呢?也就是我們說的,去new一塊新的空間,地址當然不同。
最后看看String的源碼吧
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; }
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的c++将int转换成string_Integer与int的区别 (== 与 equal)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: adc采样时间_ADC采样原理
- 下一篇: 动态分辨率是什么意思_b站么么直播最新动