• 1、关于Boolean(2015年05月30日)


    背景:刚在看Effective Java,看到一段关于Boolean提供一个返回实例的静态方法的例子,便去看了下Boolean的源码,发现有些内容是之前没注意到的,于是便有了下面这些。
    1、
    Boolean类将基本类型boolean的值包装在一个对象中,一个Boolean对象之包含一个类型为boolean的字段,摘自源码:
        /**
         * The value of the Boolean.
         *
         * @serial
         */
        private final boolean value;
     
    Boolean还提供了多个方法用于对boolean类型的基本操作,因为boolean是一个基本类型,没办法进行一些基本的操作。
     
    2、
    构造方法摘要
    Boolean(boolean value) 
              分配一个表示 value 参数的 Boolean 对象。
    Boolean(String s) 
              如果 String 参数不为 null 且在忽略大小写时等于 "true",则分配一个表示 true 值的 Boolean 对象。
    需要注意的是:Boolean提供一个以String类型为参数的构造器
      Boolean flag1 = new Boolean("true");
      System.out.println(flag1); //输出true
     
      Boolean flag2 = new Boolean("abc");
      System.out.println(flag2); //输出false
     
    3、Boolean的构造方法、parseBoolean(String name)、valueOf(String s)、getBoolean(String name)这四个方法内部都是调用的同一个方法toBoolean(),以下是摘自源码:
     
     public Boolean(String s) { 
            this(toBoolean(s));
        }
     
      public static boolean parseBoolean(String s) {
            return toBoolean(s);
        }
     
     public static Boolean valueOf(String s) {
            return toBoolean(s) ? TRUE : FALSE;
        }
     
     public static boolean getBoolean(String name) {
            boolean result = false;
            try {
                result = toBoolean(System.getProperty(name));
            } catch (IllegalArgumentException e) {
            } catch (NullPointerException e) {
            }
            return result;
        }
     
     private static boolean toBoolean(String name) {
            return ((name != null) && name.equalsIgnoreCase("true"));
        }
    所以以上4个方法传入的字符串只有在为"true"的时候才会返回true,其他情况一律返回false。
     
    4、关于Boolean比较符equals和==
    其实还是和其他的对象一样,equals比较的是值,==比较的是对象在内存中的首地址
      Boolean flag1 = new Boolean("true");
      Boolean flag2 = new Boolean("true");
      System.out.println(flag1.equals(flag2)); //输出true
      System.out.println(flag1==flag2); //输出false
     
     
    5、关于Boolean的compareTo(Boolean b )和compare(boolean x,boolean y)方法
    以下摘自源码:
     public int compareTo(Boolean b) {
            return compare(this.value, b.value);
        }
     
     public static int compare(boolean x, boolean y) {
            return (x == y) ? 0 : (x ? 1 : -1);
        }
    两者的区别在于compareTo是非静态方法,供实例变量使用,用于调用对象与参数对象的比较
    compare是静态方法,供Boolean类使用,用于两个boolean值的比较
     
    比较的共同点就是:比较对象表示的boolean值相同,则返回0,如果此对象表示 true,参数表示 false,则返回一个正值;如果此对象表示 false,参数表示 true,则返回一个负值
      Boolean flag1 = new Boolean("true");
      Boolean flag2 = new Boolean("true");
     
      System.out.println(flag1.compareTo(flag2)); //输出0
      System.out.println(Boolean.compare(true, false)); //输出1
      System.out.println(Boolean.compare(false, true)); //输出-1
     
     
     
  • 相关阅读:
    项目结束后一点心得
    提交disabled按钮的几种方法
    发现VS2005一个BUG
    单一文件上传防止粘帖及格式限制
    MessageBox.Show常用的2个方法
    一点感受一点体会
    EXCEL导入GridView,然后再汇入数据库.
    2根ECC内存
    (转载)gridview添加删除确认对话框
    反射调用Method
  • 原文地址:https://www.cnblogs.com/Dreyer/p/4539708.html
Copyright © 2020-2023  润新知