1.Boolean类里面的2个静态变量。
Boolean类,直接声明了2个静态变量,TRUE 和 FALSE,指向2个对象。
    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);
 
我们可以看一下,这2个声明为static的变量,在Boolean里有什么作用:

public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
public static Boolean valueOf(String s) {
      return toBoolean(s) ? TRUE : FALSE;
    }
里面都使用了这2个变量。这就好理解了:当我们要把一个字符串(例如:"true","false")转为Boolean类的实例时,或者把数据类型为boolean的数据转为Boolean类的实例时,不需要再通过:new Boolean(true)的方式重新创建一个实例,这样做的好处可以节省内存。虽然实例化一个Boolean对象消耗的内存不多。至少这种思路对的。
在Integer类也有相似的做法,同样valueOf(int i)方法里把从-128到127常用的256个数字先缓存起来,如果要通过valueOf方法获取Integer的实例,则返回已经缓存起来的实例,而不用重新创建一个Integer的实例:
详细参考:java.lang.Integer
    public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }
 
2.Boolean和boolean之间有什么联系?
     Boolean是数据基础类型boolean的一个包装类。
 
3.Boolean的equals,==,和compareTo的区别?
3.1 equals这个方法,用于比较2个都是Boolean对象的“值”是否相等,
3.2 == 比较的是两个Boolean实例是否同一个实例。
            Boolean b1 = new Boolean(false);
            Boolean b2 = new Boolean(false);
            System.out.println(b1 == b2);//false,因为b1和b2并非同一个对象。就是说再内存的地址是不同的。
            System.out.println(b1.equals(b2));//true,因为b1的值是 false,b2的值也是false。
            
            Boolean b3 = Boolean.valueOf(true);
            Boolean b4 = Boolean.valueOf(true);
            System.out.println(b3 == b4);//true,因为valueOf方法返回的是同一个对象。
 
3.3 compareTo和equals一样,比较的是值。不同的时候,
            Boolean b5 = Boolean.valueOf(true);
            Boolean b6 = Boolean.valueOf(true);
            Boolean b7 = Boolean.valueOf(false);
            Boolean b8 = Boolean.valueOf(false);
            System.out.println(b5.compareTo(b6));//如果相等,返回0
            System.out.println(b7.compareTo(b8));//如果相等,返回0
            System.out.println(b5.compareTo(b7));//1
            System.out.println(b7.compareTo(b5));//-1
 
------------------------------------------------------------
由于笔者也是一个java的初学者,如果有理解错误或者表达不清楚的地方,欢迎一起探讨,指正。
 

jdk源码分析——java.lang.Boolean的更多相关文章

  1. JDK1.7.0_45源码阅读<java.lang.Boolean>

    本文适合的人群 其实感觉写这个标题的内容没有必要,只要你觉得对你有帮助那么就适合你,对你没帮助那么就不适合你.毕竟我不是专业作者,但咱会尽力的.其实最重要的一点是我不希望浪费您宝贵时间. 简要把内容在 ...

  2. 从源码分析java.lang.String.isEmpty()

    今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流. 通常情况下,我们使用 ...

  3. JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue

    JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue 目的:本文通过分析JDK源码来对比ArrayBlockingQueue 和LinkedBlocki ...

  4. JDK 源码分析(4)—— HashMap/LinkedHashMap/Hashtable

    JDK 源码分析(4)-- HashMap/LinkedHashMap/Hashtable HashMap HashMap采用的是哈希算法+链表冲突解决,table的大小永远为2次幂,因为在初始化的时 ...

  5. JDK源码分析(2)LinkedList

    JDK版本 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 ...

  6. 【JDK】JDK源码分析-HashMap(1)

    概述 HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客.它其实就是前文「数据结构与算法笔记(二)」中「散列表」的实现,处理散列冲突用的是“链表法”,并且在 JDK 1.8 做了优 ...

  7. 【JDK】JDK源码分析-ArrayList

    概述 ArrayList 是 List 接口的一个实现类,也是 Java 中最常用的容器实现类之一,可以把它理解为「可变数组」. 我们知道,Java 中的数组初始化时需要指定长度,而且指定后不能改变. ...

  8. 【JDK】JDK源码分析-AbstractQueuedSynchronizer(1)

    概述 前文「JDK源码分析-Lock&Condition」简要分析了 Lock 接口,它在 JDK 中的实现类主要是 ReentrantLock (可译为“重入锁”).ReentrantLoc ...

  9. 【JDK】JDK源码分析-ReentrantLock

    概述 在 JDK 1.5 以前,锁的实现只能用 synchronized 关键字:1.5 开始提供了 ReentrantLock,它是 API 层面的锁.先看下 ReentrantLock 的类签名以 ...

随机推荐

  1. 前端基础 之 CSS

    浏览目录 CSS介绍 CSS语法 CSS的几种引入方式 CSS选择器 CSS属性相关 一.CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览 ...

  2. IP地址及子网掩码计算

    主机号全0表示网络号,主机号全1表示广播地址 我们都知道,IP是由四段数字组成,在此,我们先来了解一下3类常用的IP A类IP段 0.0.0.0 到127.255.255.255 B类IP段 128. ...

  3. 存储类型auto,static,extern,register的区别 <转>

    变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...

  4. 关于css js文件缓存问题

    什么情况下,要禁止静态文件缓存:1.经常可能要改动的 js, css.比如一个js文件引用如下<script src="test.js"></script> ...

  5. boost.asio系列(一)——deadline_timer

    一.构造函数 一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维护多个定时器.在构造deadline_timer时指定时间: basic_deadline_t ...

  6. xml知识点

    XML 被设计用来传输和存储数据. HTML 被设计用来显示数据.应该掌握的基础知识:在您继续学习之前,需要对以下知识有基本的了解: HTML / XHTML JavaScript 如果您希望首先学习 ...

  7. D - Back and Forth(模拟)

    Problem Statement Dolphin resides in two-dimensional Cartesian plane, with the positive x-axis point ...

  8. BZOJ1096 [ZJOI2007]仓库建设(斜率优化)

    题目背景 小B的班级数学学到多项式乘法了,于是小B给大家出了个问题:用编程序来解决多项式乘法的问题. 题目描述 L公司有N个工厂,由高到底分布在一座山上. 工厂1在山顶,工厂N在山脚. 由于这座山处于 ...

  9. 图片压缩工具之grunt-contrib-imagemin

    对页面进行优化时~免不了对使用的图片进行压缩~以便减小我们使用的图片的大小~这样就可以减少用户下载的文件大小,加快页面访问速度.Google Pagespeed最佳实践建议我们用 jpegtran 或 ...

  10. java中抽象类与接口

    1.抽象类是类,它的子类不能再继承其它类了,但可以实现一个和多个接口.接口不是类,它的子接口可以继承多个接口.2.抽象类中是可以有不用abstract修饰的方法,而接口中只能有抽象方法,即方法都要用a ...