Integer与int和String对象与字符串之间的"=="和equals情况

一、Integer与int

①代码

    @Test
    public void testInteger() {
        int i = 129;
        int j = 129;
        Integer m = 128;
        Integer n = 128;
        Integer x = -128;
        Integer y = -128;
        int g = 128;
        System.out.println("测试Integer与int之间使用'=='和equals的情况:");
        System.out.println("1、int与int的等号判断:" + (i == j));
        System.out.println("2、Integer与Integer的等号判断(-128~127):" + (m == n));
        System.out.println("3、Integer与Integer的等号判断(大于127和小于-128的情况):" + (x == y));
        System.out.println("4、Integer与Integer的equals判断:" + m.equals(n));
        System.out.println("5、Integer与int的equals判断:" + m.equals(g));
    }

②运行截图:

③总结:1、只要是Intger对象参加比较的情况,都使用equals方法进行比较。

              2、同时是int类型数据选择"=="进行判断即可。

              3、两个Integer对象的值不在-128~127时,将会不相等。

                      原因:在这个范围内,系统会自动为这范围内的每一个整数缓存对象,这范围的每一个相同的数字对应的Integer对象所对应的引用都是相等的,因为指向的对象都是一个,而这范围之外的就没有这种缓存。也就和正常的引用一样,因为指向的是不同的对象,所以不相等,这样做的原因是为了加快系统效率。而且JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样。(总之就是对象比的是引用地址,但是Java提前将-128~127的数创建好了Integer对象,所以说,所有的-128~127的数将共用一个Integer对象)。

二、String对象与字符串

①代码

    @Test
    public void testString() {
        String l1 = "lihao";
        String l2 = "lihao";
        String l3 = new String("lihao1");
        String l4 = new String("lihao1");
        String l5 = "lihao1";
        System.out.println("字符串与字符串的等号判断:" + l1 == l2);
        System.out.println("String对象与String对象的等号判断:" + l3 == l4);
        System.out.println("String对象与String对象的等号判断:" + l3.equals(l4));
        System.out.println("String对象与字符串的equals判断:" + l3.equals(l5));
    }

②运行截图:

猜你喜欢

转载自blog.csdn.net/tree_ifconfig/article/details/82846831
今日推荐