包裝類的比較
一、前言:
java中 ,包裝類是一個對象,也是一個具體的數值。對於對象比較可以用 equals()方法,對於數值的比較可以用 == 進行比較
二,代碼比較:
1.
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
public class Main3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer a = 120;
Integer b = 120;
if(a==b) {
System.out.println("飯飯最美");
}
if(a.equals(b)) {
System.out.println("洋洋最帥");
}
}
}
運行:
2.
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
public class Main3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer a = 130;
Integer b = 130;
if(a==b) {
System.out.println("飯飯最美");
}
if(a.equals(b)) {
System.out.println("洋洋最帥");
}
}
}
運行:
三、原因分析
1、通過實驗代碼可以看到, a2 == b2 的結果與 a1==b1 結果不一樣。
2.從jdk1.5開始,Integer提供了一個內部類,IntegerCache , 數值範圍在 Integer
(-128 ~ 127)之間(byte 類型的範圍 ),是不會新建對象,調用的是數據緩衝池中的值。
四、最終結論
總結: 在byte類型範圍內, 包裝類用 == 和 equals()方法比較值是一樣的,超出byte範圍, == 即使數值結果一樣,但是 == 返回的false,因爲 Integer 底層新建了對象,不是同一個地址值。
結論: java中包裝類請使用 equals()方法進行比較!
五.例題:
題目鏈接:https://www.dotcpp.com/oj/problem1458.html
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
public class Main3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
sc.nextLine();
List<Integer>lists = new ArrayList<>();
while(n-->0) {
String str = sc.nextLine();
String []strs = str.split(" +");
for (int i = 0; i < strs.length; i++) {
if(!strs[i].equals(" ")) {
lists.add(Integer.parseInt(strs[i]));
}
}
}
Object []arr = lists.toArray();
Arrays.sort(arr);
int duan = 0;
int chong = 0;
for (int i = 1; i < arr.length; i++) {
if((Integer)(arr[i])-(Integer)(arr[i-1])==2) {
duan = (Integer)arr[i]-1;
}else if((Integer)arr[i]==(Integer)arr[i-1]) {
//else if((Integer)arr[i]==(Integer)arr[i-1]);
chong = (Integer)arr[i];
}
}
System.out.println(duan+" "+chong);
}
}
}
測評結果:
錯誤
分析:
改正:
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
public class Main3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
sc.nextLine();
List<Integer>lists = new ArrayList<>();
while(n-->0) {
String str = sc.nextLine();
String []strs = str.split(" +");
for (int i = 0; i < strs.length; i++) {
if(!strs[i].equals(" ")) {
lists.add(Integer.parseInt(strs[i]));
}
}
}
Object []arr = lists.toArray();
Arrays.sort(arr);
int duan = 0;
int chong = 0;
for (int i = 1; i < arr.length; i++) {
if((Integer)(arr[i])-(Integer)(arr[i-1])==2) {
duan = (Integer)arr[i]-1;
}else if((Integer)arr[i]-(Integer)arr[i-1]==0) {
chong = (Integer)arr[i];
}
}
System.out.println(duan+" "+chong);
}
}
}
測評:
正確