背景:刚在看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
 
 
 

1、关于Boolean(2015年05月30日)的更多相关文章

  1. Bootstrap之Footer页尾布局(2015年05月28日)

    直接上页尾部分的代码: <!--采用container-fluid,使得整个页尾的宽度为100%,并设置它的背景色--><footer class="container-f ...

  2. 初识Less(2015年05月23日)

    因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come  on...... 一.简介 ...

  3. 零基础学习云计算及大数据DBA集群架构师【Linux系统配置及网络配置2015年12月30日周三】

    /Mon *************摘要************** 计划任务 )一次性计划任务 服务:atd 命令:at 服务存放文件:/etc/init.d/atd 系统配置文件:/etc/at. ...

  4. 2015年11月30日 spring初级知识讲解(一)装配Bean

    序,Spring的依赖注入是学习spring的基础.IOC为控制反转,意思是需要的时候就由spring生成一个,而不是先生成再使用. 写在前面 Spring提供面向接口编程,面向接口编程与依赖注入协作 ...

  5. 初识CSS3之媒体查询(2015年05月31日)

    一.什么是媒体查询 媒体查询是面向不同设备提供不同样式的一种实现方式,它可以为每种类型的用户提供最佳的体验,也是响应式设计的实现方式. 现今每天都有更多的手机和平板电脑问市.消费者能够拥有可想象到的各 ...

  6. java之enum枚举(2015年05月28日)

    背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...

  7. 实用工具推荐(Live Writer)(2015年05月26日)

    1.写博客的实用工具 推荐软件:Live Writer 使用步骤: 1.安装 Live Essential 2011,下载地址:http://explore.live.com/windows-live ...

  8. Font Awesome图标字体库(2015年05月25日)

    Font Awesome是一款非常棒的字体图标工具,给个地址,具体的自已慢慢去体会,只能帮你到这儿了...... http://fortawesome.github.io/Font-Awesome/ ...

  9. Bootstrap插件之Carousel轮播效果(2015年-05月-21日)

    <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"& ...

随机推荐

  1. Lucene:信息检索与全文检索

    目录 信息检索的概念 信息检索技术的分类 全文检索与数据库查询对比 全文检索工具一般由三部分构成 全文检索中建立索引和进行检索的流程 索引里面究竟存什么 如何创建索引 如何对索引进行检索 Lucene ...

  2. freemarker截取字符串subString

    转至:http://fengzhijie1103.iteye.com/blog/1142918 freemarker截取字符串其实和JAVA语法是差不多了,也有substring 方法       如 ...

  3. 设计模式-结合Android代码

    开始学设计模式 1 单例模式 单例模式可以说是最容易理解的模式了,也是应用最广的模式之一,先看看定义吧. 定义:确保单例类只有一个实例,并且这个单例类提供一个函数接口让其他类获取到这个唯一的实例. 什 ...

  4. servler--请求重定向

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  5. PostgreSQL的 initdb 源代码分析之十七

    继续分析: setup_collation() 展开: /* * populate pg_collation */ static void setup_collation(void) { #if de ...

  6. PostgreSQL中,database,schema,table之间关系

    从逻辑上看,schema,table,都是位于database之下. 首先,在postgres数据库下建立表(相当于建立在public schema下): [pgsql@localhost bin]$ ...

  7. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  8. HOW MYSQL USES INTERNAL TEMPORARY TABLES

    HOW MYSQL USES INTERNAL TEMPORARY TABLES Table of Contents [hide] 1)UNION queries 2)Some views 3)SQL ...

  9. Qt Quick实现的疯狂算数游戏

    使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QM ...

  10. 前端js插件

    jquery jquery官方 版本:v 2.1.0v 1.11.0 yquery 暂停更新 版本: v 1.6v 1.5 v 1.4v 1.3 v 1.2v 1.1 v 1.0 jQuery 原型插 ...