不是基本類型的不能用等號比較以及包裝類的比較

                                         包裝類的比較

一、前言:

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);
		    }
		}
	}

測評:

正確

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章