java类型比较_Java数据类型的比较
1. “==” : 可以比較基本數據類型 , 也可以比較引用數據類型 。基本數據類型比較的是值,引用數據類型比較的是地址。
基本數據類型byte,short,char,int,long,float,double,boolean
封裝數據類型Byte,Short,Character,Integer,Long,Float,Double,Boolean
示例代碼1:/**
*?@ClassName:?TypeCompare1
*?@Author:?liuhefei
*?@Description:?byte,?short,?int,?long四種基本數據類型以及其包裝類的比較
*??1.?基本數據類型與其對應的包裝類運算或比較時,會自動拆箱成基本數據類型;
在自動裝箱時,會先檢查其值是否在-128到127之間,如果在這之間,就會直接指向常量池中其值的地址;
如果不在-128到127之間,就會創建一個新的對象,存儲在堆中,就是兩個不同的對象,比較時為false.
2.同時byte,?short,?long也具有該特性。
3.不同類型之間的基本數據類型也可以使用==進行比較,比較的是它們的值
*
*?@Date:?2020/5/11?17:53
*/
public?class?TypeCompare1?{
public?static?void?main(String[]?args)?{
int?i?=?127;
int?i1?=?127;
Integer?i2?=?127;
Integer?i3?=?127;
Integer?i4?=?new?Integer(127);
Integer?i5?=?new?Integer(127);
Integer?i6?=?128;
Integer?i7?=?128;
int?i8?=?300;
int?i9?=?300;
long?l1?=?300;
float?f1?=?300;
double?d1?=?300;
System.out.println(i?==?i1);?//?true;?基本類型比較值
System.out.println(i1?==?i2);//?true;i2自動拆箱變成基本類型,兩基本類型比較值
System.out.println(i1?==?i4);//?true;?i4自動拆箱變成基本類型,兩基本類型比較值
System.out.println(i2?==?i3);//?true;?i2和i3都指向常量池中同一個地址
System.out.println(i2?==?i4);//?false;?兩個不同的對象
System.out.println(i4?==?i5);//?false;?兩個不同的對象
System.out.println(i6?==?i7);//?false;?自動裝箱時,如果值不在-128到127,就會創建一個新的對象
//不同類型之間的基本數據類型也可以使用==進行比較
System.out.println(i8?==?i9);???//true?基本類型之間的比較,比較的是值
System.out.println(i8?==?l1);???//true
System.out.println(i8?==?f1);???//true
System.out.println(i8?==?d1);???//true
}
}
示例代碼2:/**
*?@ClassName:?TypeCompare2
*?@Author:?liuhefei
*?@Description:?float,double的比較
*?1.?float,double類型的包裝類,都會在堆中創建一個新對象,因此比較的是對象的地址
*
*?@Date:?2020/5/11?17:53
*/
public?class?TypeCompare2?{
public?static?void?main(String[]?args)?{
float?f1?=?314.15926f;
float?f2?=?314.15926f;
Float?f3?=?314.15926f;
Float?f4?=?314.15926f;
System.out.println(f1?==?f2);???//true,基本數據類型的比較,比較的是值
System.out.println(f3?==?f4);???//false,包裝類型的比較,都會創建新對象,比較的是對象的地址
System.out.println(f1?==?f3);???//true,?包裝類型拆箱為基本數據類型,比較的是值
double?d1?=?314.15926575958;
double?d2?=?314.15926575958;
Double?d3?=?314.15926575958;
Double?d4?=?314.15926575958;
System.out.println(d1?==?d2);??//true,基本類型的比較,比較的是值
System.out.println(d3?==?d4);??//false,包裝類型的比較,都會創建新對象,比較的是對象的地址
System.out.println(d1?==?d3);??//true,包裝類型拆箱為基本數據類型,比較的是值
}
}
2. equals() : 只能比較引用數據類型, 默認比較的是地址值,它不能比較基本數據類型,基本數據類型不是Object類型, 不能使用equals方法比較。
使用equals方法比較引用類型時,等同于"==",比較的是兩個對象的值是否相等。
如果你想自定義比較方法,需要重寫equals方法。
3. Jave中,Object類是所有Java類的祖先,Object是Java語言中唯一一個沒有父類的類。每個類都使用 Object 作為超類。所有對象(包括數組)都實現這個類的方法。可以使用類型為Object的變量指向任意類型的對象。
在Object類中定義的方法,在所有類中都可以使用。Object類中定義了equals()方法和hashCode()方法,具體如下:
public boolean equals(Object obj): 比較兩個對象引用的值是否相等(比較地址)。指出調用該方法的對象是否與obj對象相等。即地址是否相等。
public int hashCode():該方法返回對象的哈希碼值,唯一標識一個對象。
Object類中定義的equals方法,用于比較對象的內存地址, 對于引用數據類型進行equals比較,在沒有重寫equals方法的情況下,它們之間的比較還是基于它們在內存中的存放位置的地址值的。
而有些類重寫了equals方法和hashCode方法,比如Byte,Short,Character,Integer,Long,Float,Double,String,Date,Boolean等等,在這些類當中equals方法有其自身的實現,而不再是比較類在堆內存中的存放地址了。
因為Object的equals方法也是用雙等號(==)進行比較的,所以比較后的結果跟雙等號(==)的結果相同。
4. 基本數據類型byte,short,char,int,long,float,double,boolean的比較應該使用雙等號(==),比較的是它們的值。
5. 引用數據類型在使用==比較的時候,比較的是它們在內存中的存放地址.只有當它們是同一個new出來的對象時,它們的比較結果才會為true,否則比較結果為false.
基本數據類型在使用==比較的時候,比較的是它們的值。不同類型之間的基本數據類型也可以使用==進行比較
6. 基本數據類型與其對應的包裝類運算或比較時,會自動拆箱成基本數據類型,也可以使用==直接進行比較。
在自動裝箱時,會先檢查其值是否在-128到127之間,如果在這之間,就會直接指向常量池中其值的地址;
如果不在-128到127之間,就會創建一個新的對象,存儲在堆中,就是兩個不同的對象,比較時為false.
7. 凡是new出來的都是對象,存儲在堆內存中。
7. java中Integer類型對于-128-127之間的數是存緩沖區的,所以用等號比較是一致的。但對于不在這區間的數字是在堆中new出來的。所以地址空間不一樣,也就不相等。
如果兩個Integer類型的數相等,且在-128-127之間,用==比較返回true,其余返回false.
8. 對于引用數據類型,我們還可以使用x.compareTo(y)方法來比較, 如果x與y相等,返回0;x大于y返回1;x小于y返回-1;
9. 兩個基本類型int進行相等比較,直接用==即可。一個基本類型int和一個包裝類型Integer進行相等比較,直接用==比較即可,Integer類型會做拆箱操作。
10. Integer類型比較大小,要么調用Integer.intValue()轉為基本類型用“==”比較,要么直接用equals比較。
總結:
(1)凡是new出來的都是對象,new Integer(127)與new Integer(127)使用==比較為false,使用equals比較才會返回true.
(2)無論如何,Integer與new Integer使用==比較都不會相等,使用equals比較才會返回true.
(3)兩個都是非new出來的Integer,如果數在-128到127之間,使用==比較則是true,如果不在-128到127之間,使用==比較否則為false。而如果使用equals方法來比較,無論比較的數在不在-128到127之間都為true.
(4)int和integer(無論new否)比,都為true,因為會把Integer自動拆箱為int再去比.
示例代碼3:public?class?TypeCompare3?{
public?static?void?main(String[]?args)?{
int?i?=?127;
int?ii?=?128;
Integer?i1?=?new?Integer(127);
Integer?i2?=?new?Integer(127);
Integer?i3?=?127;
Integer?i4?=?127;
Integer?i5?=?128;
Integer?i6?=?128;
Integer?i7?=?new?Integer(128);
Integer?i8?=?new?Integer(128);
Integer?i9?=?200;
Integer?i10?=?100;
System.out.println(i?==?i1);????//true?int和integer(無論new否)比,都為true,因為會把Integer自動拆箱為int再去比
System.out.println(i?==?i3);????//true
System.out.println(ii?==?i7);???//true
System.out.println(i1?==?i2);???//false??兩個不同的對象
System.out.println(i1?==?i3);???//false??無論如何,Integer與new?Integer不會相等
System.out.println(i3?==?i4);???//true??在-128-127之間,用==比較返回true
System.out.println(i5?==?i6);???//false?不在-128-127之間,用==比較返回false
System.out.println(i7?==?i8);???//false??兩個不同的對象
System.out.println(i1?==?i3);???//false??兩個不同的對象
System.out.println(i5?==?i7);???//false??兩個不同的對象
//x.compareTo(y)?如果x與y相等,返回0;x大于y返回1;x小于y返回-1
int?result1?=?i1.compareTo(i2);
int?result2?=?i5.compareTo(i6);
int?result3?=?i7.compareTo(i8);
int?result4?=?i1.compareTo(i9);
int?result5?=?i1.compareTo(i10);
System.out.println("result1?=?"?+?result1);??//0
System.out.println("result2?=?"?+?result2);??//0
System.out.println("result3?=?"?+?result3);??//0
System.out.println("result4?=?"?+?result4);??//-1
System.out.println("result5?=?"?+?result5);??//1
System.out.println("1:?"?+?i1.equals(i2));???//true
System.out.println("2:?"?+?i3.equals(i4));???//true
System.out.println("3:?"?+?i5.equals(i6));???//true
System.out.println("4:?"?+?i7.equals(i8));???//true
System.out.println("5:?"?+?i1.equals(i3));???//true
System.out.println(i1.intValue()?==?i2.intValue());??//true
System.out.println(i3.intValue()?==?i4.intValue());??//true
System.out.println(i5.intValue()?==?i6.intValue());??//true
System.out.println(i7.intValue()?==?i8.intValue());??//true
}
}
11. long與Long的比較, float與Float的比較, double與Double的比較均與int與Integer的比較類似,不再多說。
示例代碼4:public?class?TypeCompare4?{
public?static?void?main(String[]?args)?{
float?f1?=?3.14f;
float?f2?=?3.14f;
Float?f3?=?3.14f;
Float?f4?=?3.14f;
Float?f5?=?new?Float(3.14);
Float?f6?=?new?Float(3.14);
System.out.println(f1?==?f2);??//true???基本數據類型比較
System.out.println(f3?==?f4);??//false??兩個不同的對象
System.out.println(f5?==?f6);??//false??兩個不同的對象
System.out.println(f1?==?f3);??//true??封裝類型會拆箱
System.out.println(f1?==?f5);??//true??封裝類型會拆箱
System.out.println(f3?==?f5);??//false
System.out.println("1:?"?+?f3.equals(f4));??//true
System.out.println("2:?"?+?f3.equals(f5));??//true
System.out.println("3:?"?+?f5.equals(f6));??//true
}
}
示例代碼5:public?class?TypeCompare5?{
public?static?void?main(String[]?args)?{
double?d1?=?3.1415926d;
double?d2?=?3.1415926d;
Double?d3?=?3.1415926d;
Double?d4?=?3.1415926d;
Double?d5?=?new?Double(3.1415926d);
Double?d6?=?new?Double(3.1415926d);
System.out.println(d1?==?d2);??//true???基本數據類型比較
System.out.println(d3?==?d4);??//false??兩個不同的對象
System.out.println(d5?==?d6);??//false??兩個不同的對象
System.out.println(d1?==?d3);??//true??封裝類型會拆箱
System.out.println(d1?==?d5);??//true??封裝類型會拆箱
System.out.println(d3?==?d5);??//false??兩個不同的對象
System.out.println("1:?"?+?d3.equals(d4));??//true
System.out.println("2:?"?+?d3.equals(d5));??//true
System.out.println("3:?"?+?d5.equals(d6));??//true
}
}
總結
以上是生活随笔為你收集整理的java类型比较_Java数据类型的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java文件编译_【java】javac
- 下一篇: java内存图解_图解JAVA内存模型(