java中int和integer等于比较,if作用域

相同类型比较

  • 基本类型比较,基本数据类类型存的是数值本身,直接使用值比较
  • 引用类型比较,引用类型变量在内存放的是数据的引用,使用地址比较

int 和 integer比较

  • 把integer转成int,然后进行值比较

integer和integer比较

  • -128~127 之间的数,会被缓存,超过这个范围,会新new Integer(),new出来的一定是一个新对象
  • 给一个Integer赋予一个int类型的时候,(自动装箱)会调用Integer的静态方法valueOf
        Integer a = 127; //自动装箱
        Integer b = 127;
        int c = 127;
        Integer d = new Integer(127);
        Integer e = Integer.valueOf(127);

        System.out.println(a == b); //true  因为小于128,被缓存在cache里,所以是同一个对象
        System.out.println(a == d); //false new出来的是一个新对象,所以一定不相等
        System.out.println(a == e); //true  相当于执行了valueOf()方法,因为小于128,从cache里取值
        System.out.println(d == e); //false new出来的是一个新对象,所以一定不相等
        System.out.println(a == c); //true  把integer转为int,然后进行值比较
        System.out.println(d == c); //true  把integer转为int,然后进行值比较
        System.out.println(e == c); //true  把integer转为int,然后进行值比较

if 作用域

如果有大括号{},作用域在{}内.如果没有大括号,作用域只有一行,而且不可以声明变量

        int a=10;
        int b= 0;

        if(a==10){
            // 可以使用外部声明的变量
            a=0;
            // 还可以声明变量,但是作用域仅在大括号内
            int c =10;
        }
        // 在if外部不可以使用if里的变量
        // c=20;

        if (a == b)
            // if 不加括号,作用域只有一行,不可以在这里声明变量
            // int no=10; // 声明报错
            
            System.out.println("if作用域内:");
            // 这行开始,已经跳出了if作用域
            System.out.println("if作用域外:");
posted @ 2021-03-22 15:04  rm-rf*  阅读(243)  评论(0编辑  收藏  举报