Integer,int,==解析

2021-01-07 歐陽IT學習筆記

1.

Integer a = 127;Integer b = new Integer(127);System.out.println(a==b);//false

Integer a =127;這裡有一個自動裝箱的過程,本質是調用Integer.valueof(127);

而Integer b = new Integer(127);新建了一個對象。所以不相等。

2.

Integer c = 127;Integer d = Integer.valueOf(127);System.out.println(c==d); //true

答案為true;Integer c =127 就相當於Integer.valueof(127)。

3.

Integer g = 128;Integer h = Integer.valueOf(128);System.out.println(g==h);//false

當我們把127換成128就會為false。原因是使用了緩存機制。[-128,127]這個區間裡會有緩存;否則調用new Integer()。打開valueof的源碼。

valueof源碼

對所有的進行一下歸類。

Integer派別:Integer、Short、Byte、Character、Long這幾個類的valueOf方法的實現是類似的。

Double派別:Double、Float的valueOf方法的實現是類似的。每次都返回不同的對象。

Double的valueof源碼

4.

Integer e = new Integer(127);Integer f = new Integer(127);System.out.println(e==f);//false

同時新建了對象,不管有沒有緩存都會返回false。

5.

Integer i = 128;int j = new Integer(128);System.out.println(i==j);//true

這裡有一個拆箱過程。實質比較的是i.intvalue()==j。這時和緩存就沒什麼關係了。返回true。j是int類型,i是Integer類型。會將i轉成int比較。若類型相同(都是Integer)則不會轉換。

相關焦點

  • int 和 integer:裝箱和拆箱的過程,會用到什麼方法
    我們有以下自動拆裝箱的代碼:public static void main(String[]args){Integer integer=1; //裝箱 int i=integer; //拆箱}對以上代碼進行反編譯後可以得到以下代碼:public static void main(String[]args){Integer integer=Integer.valueOf(1); int i=integer.intValue(); }
  • java面試技巧:Integer和int的那些事
    同樣的我們今天要說的Integer就是int的包裝類,除了提供int類型的欄位進存儲外,還給我們提供了基本操作,如數學運算、int和字符串之間的轉換等,我們可以來看看:我們可以看到Integer中的法前都有M,代表部分法是靜態法,可以直接使,並且還有 很多的變量都是使了final進修飾:變量的value即是來存儲我們的int值的,也就是被Integer包裝的值
  • int 和 integer :裝箱和拆箱的過程,會用到什麼方法,你覺得這個會對性能有影響嗎,原因是什麼(百度一面)
    public static  void main(String[]args){    Integer integer=1; //裝箱    int i=integer; //拆箱}public static  void main(String[]args){    Integer integer=Integer.valueOf(
  • Reverse Integer | 整數反轉
    題目LeetCode[1]LeetCode-cn[2]Given a signed 32-bit integer x, return
  • 變量類型測試函數的使用:二、is_int的用法
    is_intis_int (字面意思) — 檢測變量的類型是否為整數is_int描述is_int ( mixed $var ) : bool「is_int 函數參數可以混合類型「混合類型:一個參數可以接受多種不同的類型
  • C語言中char int轉換問題
    以整型為例:char str[]="1234";int a=atoi(str);(2)數字換成字符串,用sprintf.以整型為例。radix);  詳細解釋:itoa是英文integer to array(將int整型數轉化為一個字符串,並將值保存在數組string中)的縮寫.
  • Python內置函數int()高級用法
    例如:>>> int('3333')3333>>> int('3333', 0)3333>>> int('0o333', 0)219>>> int('0x3333', 0)13107那麼int()函數的第二個參數除了0還有啥?
  • 吊打面試官系列:說說Integer緩存範圍
    Integer整體閱覽;            String integerCacheHighPropValue =                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");            //如果有配置-XX:AutoBoxCacheMax=<size>
  • int和Integer裝箱拆箱遇見的坑
    前言:Java是一個近乎純潔的面向對象程式語言,但是為了編程的方便還是引入了基本數據類型,但是為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對應的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,
  • int和Integer的面試題,你都會了嗎
    int是一種基本數據類型,Integer是一個對象,需要實例化才能使用。它對int進行了包裝,在Integer內部有一個對應的數值int變量。private final int value;int和Integer的對比,經常被拿來作為面試題,下面就多種情況,通過源碼分析其結果。我們將比較「==」和Equals兩種結果。第一種情況:這種情況是通過new關鍵字創建Integer對象,參數值一樣。內部的int類型的value變量會保存參數值。
  • 通過本質看現象:關於Integer受內部初始範圍而出現的有趣現象
    在我們定義Integer a=100時,編譯器會轉成Integer.valueOf(100),即內部實現是Integer a= Integer.valueOf(100),而在Integer的源碼裡valueOf方法如下:publicstatic Integer valueOf(int i){if (i >= IntegerCache.low &
  • mysql中bigint、int、mediumint、smallint 和 tinyint的取值範圍
    結果不是程序的問題,是資料庫欄位影響的.表的id是mediumint,而這個值最大是8388607,導致插入不進去.所以建議大家如果是這種插入刪除比較頻繁的表,而且數據量又比較大,要設置成int或者是bigint,以免後續使用遇到麻煩.
  • 教程|Java Integer類內置方法
    1、String toBinaryString(int i) 給定一個int類型數據,返回這個數據的二進位字符串。numberOfLeadingZeros(int i) 給定一個int類型數據,返回這個數據的二進位串中從最左邊算起連續的「0」的總數量。
  • C#之int挑戰Java之Integer
    幸運的是,Java的類庫是開源的,所以我們可以毫不費力地看到相關的原始碼:public static Integer valueOf(int i) {        if(i >= -128 && i <= IntegerCache.high)            return IntegerCache.cache
  • Java數據類型語法解析
    很多程式語言都依賴於特定的計算機類型和對Java數據類型屬性的具體編譯實現,比如word和integerJava數據類型的大小等。另一方面,Java的虛擬機負責定義其內置Java數據類型的各方面內容。Java數據類型詳解Java數據類型就是對內存位置的抽象表達。
  • Reverse Integer
    public class Reverse_Integer { public static int reverse(int x) {  int rev=0;  while(x!=0) {   int pop = x % 10;   x/=10;   rev=rev*10+pop;  }  return rev; } public static void main(String args[]) {  int x=123;  int ans=reverse(x);  System.out.println
  • 如何在Java中輕鬆地將字符串轉換為Integer
    /StrConvert.java:4: error: bad operand types for binary operator '/' System.out.println("Using String:" + (strTest/4));因此,在對字符串執行peform數值操作之前,需要將其轉換為int