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. input与字符串格式化

    # Auther: Aaron Fan #字符转格式化: name = input("Enter your name: ")age = int(input("Enter ...

  2. jQuery 基础 : 获取对象 根据属性、内容匹配, 还有表单元素匹配

    指定元素中包含 id 属性的, 如: $("span[id]")   <span id="span1" name="S1">AA ...

  3. HTTP 协议 -- 基础

    概述 HTTP 是基于 TCP/IP 协议的应用层协议,它不涉及数据包(packet)的传输,主要是规定客户端和服务器之间的通信格式,默认使用 80 端口.   HTTP 协议最早版本是 HTTP/0 ...

  4. org.apache.commons.lang3包中的isEmpty和isBlank

    主要为了区分一下empty和blank的用法,先看源码: isEmpty public static boolean isEmpty(CharSequence cs) { return cs == n ...

  5. ABP框架应用-MySQL数据库集成

    1.  框架以外依赖包引入 1.1.  Pomelo.EntityFrameworkCore.MySql 1.2.  Pomelo.EntityFrameworkCore.MySql.Design 2 ...

  6. c++位运算符 | & ^ ~ && ||,补码,反码

    一:简介 1 位逻辑运算符: & (位   “与”)  and       ^  (位   “异或”)       |   (位    “或”)   or       ~  (位   “取反” ...

  7. 编译原理-First集和Follow集

    刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快. 先看一下两种集合的求法: First集合的求法:   ...

  8. linux下的静态库和动态库

    一.linux下的静态库   静态库中的被调用的函数的代码会在编译时一起被复制到可执行文件中去的!!可执行文件在运行不需要静态库的存在!   二.linux下动态库的构建和使用 1.动态库的构建   ...

  9. git 打tag

    查看已有tag git tag 创建新的tag git tag <version or tagname> -m <tag description> 例如创建一个版本1.0.0的 ...

  10. (一)ByteDance编程题

    题目: 公司的程序员不够用了,决定把产品经理都转变为程序员以解决开发时间长的问题. 在给定的矩形网格中,每个单元格可以有以下三个值之一: 值0代表空单元格 值1代表产品经理 值2代表程序员 每分钟,任 ...