背景:刚在看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. linux中vi编辑器

    vi编辑器,通常称之为vi,是一种广泛存在于各种UNIX和Linux系 统中的文本编辑程序.它的功能十分强大,但是命令繁多,不容易掌握,它可以执行输出.删除.查找.替换.块操作等众多文本操作,而且用户 ...

  2. HTML5实现动画三种方式

    编者注:作者以一个运动的小车为例子,讲述了三种实现HTML5动画的方式,思路清晰,动画不仅仅是canvas,还有css3和javascript.通过合理的选择,来实现最优的实现. PS:由于显卡.录制 ...

  3. JqueryMobile- 搭建主模板

    最近公司要开发手机端的,可是我没学过安卓,然后用HTML5+JQUERYMOBILE也可以做这些手机端的程序,做成个网页,发到网上,免强也行,于是开始了我JQUERYMOBILE的学习. 先放一下主模 ...

  4. 下载Xml文件方法

    #region 下载Xml文件方法 //定义委托 private delegate void DownLoadDelegate(string url, string filename); privat ...

  5. 怎么删除windows中无用的服务

    搜索cmd->以管理员身份打开 输入sc delete  服务名 回车即可

  6. iPhone Push消息全攻略.1

    要做一个iPhone Push消息的需求,从简单test的开始. 1.先添加一个app ID 2.点击Edit来配置push服务. 3.生成两个证书,一个用于开发,一个用于发布. 4.按下图操作创建一 ...

  7. 使用charles 抓包

    1.保证手机和Mac连接的是同一个无线局域网 2.在Mac上打开Charles Proxy,菜单栏操作:Proxy→Proxy Setting,检查端口,一般保持默认,HTTP Proxy端口为888 ...

  8. cardsui-for-android

    https://github.com/Androguide/cardsui-for-android cardsui-for-android-master.zip

  9. [Angular 2] Factory Provider with dependencies

    This lesson discusses when and how to add dependencies, resolved by Angular’s DI, to factory provide ...

  10. Android横竖屏切换处理

    Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题   一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你 ...