Integer一類的比較問題

2022-07-23 03:33:08 字數 1163 閱讀 6018

總體主要分為兩個方面

①比較的是值

一、基本資料型別與引用資料型別進行比較時,引用資料型別會進行拆箱(自動拆裝箱需要在jdk1.5以上),然後與基本資料型別進行值的比較

舉例:

int i = 12;

integer j = new integer(12);

i == j 返回的是true

二、引用資料型別與基本資料型別進行比較(equals方法),基本資料型別會進行自動裝箱,與引用資料型別進行比較,object中的equals方法比較的是位址,但是integer類已經重寫了equals方法,只要兩個物件的值相同,則可視為同一物件,具體看api文件,所以這歸根到底也是值的比較!

舉例:

int i = 12;

integer j = new integer(12);

j.equals(i) 返回的是true

②比較的是位址

一、如果引用資料型別是這樣 integer i = 12;直接從常量池取物件,這是如果數值是在-128與127之間,則視為同一物件,否則視為不同物件

舉例:

integer i = 12; integer j = 12; i == j 返回的是true

integer i = 128; integer j = 128; i == j 返回的是false

在編譯integer i = 12的時候,被翻譯成integer i = integer.valueof(12),而valueof()會對-128到127之間的數進行快取。

二、如果引用資料型別是直接new的話,不管值是否相同,這時兩個物件都是不相同的,因為都會各自在堆記憶體中開闢一塊空間

舉例:

integer i =new integer(12);

integer j = new integer(12);

i == j 這時返回的是false

三、從常量池取物件跟new出來的物件也是不同的

舉例:

integer i = 12;

integer j = new integer(12)

i == j 這時返回的是false,乙個是常量池的,乙個是堆中的。

Integer比較相等的問題

記得是有一次查詢資料,資料封裝到實體類進行資料匹配的時候,出現了integer型別比較像等的問題,明明兩個數是一樣的,但是就是匹配不上。乙個很簡陋的例子 public static void main string args else 結果輸出 明明是一樣的數,結果沒有匹配成功 雖然integer不...

Integer物件的比較問題

integer a 1 integer b 1 integer c 500 integer d 500 system.out.println a b system.out.println c d integer aa new integer 10 integer bb new integer 10 ...

一類求和問題 類歐幾里得

自 今天要來介紹的是用類歐幾里得演算法來解決一類求和問題。給出 n,a,b,c 對於每組資料,分別輸出 f,h,g 的值,答案對 998244353 取模。n leq 10 9 由於這三個函式是互相依賴的,所以我們將其放在乙個函式裡求解 分別算會產生大量的重複計算 include include u...