• 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

    }

    }


    原文链接:https://blog.csdn.net/weixin_39754267/article/details/114047929

  • 相关阅读:
    古人诗词之王安石
    关于周期函数的命题
    Strum—Lioville问题
    计算反常积分
    【面积原理】计算级数和
    【洛谷P6046】纯粹容器
    【洛谷P3631】方格染色
    【牛客挑战赛48 E】速度即转发
    【CF103D】Time to Raid Cowavans
    【洛谷P4280】逆序对
  • 原文地址:https://www.cnblogs.com/renjiaqi/p/14471646.html
Copyright © 2020-2023  润新知