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. Edison UVALive3488

    传送门 题目大意 有一个0~n-1的序列,有m次操作,操作包含三个元素:pl,len,ti,表示这个操作进行ti次,每次将从pl+1开始的len个元素移到序列头部.分析 看到题不难想到使用平衡树将需移 ...

  2. c/c++头文件中#ifndef/#define/#endif的用法

    想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...

  3. WordCount 编码与测试

    word count github 项目地址:https://github.com/liuqiang666/wordCount PSP表格 PSP2.1  PSP阶段  预估耗时(小时)  实际耗时( ...

  4. Android RecycleView

    Android RecyclerView 用来替代传统的ListView 要在Android Studio 中使用RecyclerView 首先要依赖相应的包 右键项目--->Open Modu ...

  5. [译]Javascript中的循环

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  6. 为PyCharm自动配置作者信息

    在团队开发中,需要在代码中编写一些项目信息或个人信息,如开发者.开发时间.项目名称等信息,以利于后期对项目修改和维护.如果每次都需要手动编写,费时费力.下面介绍如何自动在代码文件中自动生成这些信息. ...

  7. Python3 中socket使用

    1.动态导入模块 在当前目录下有lib和test目录,在test中要想使用lib中的aa的C类: test中: 第一种方法:推荐 importlib.import_module('lib.aa') o ...

  8. Total Commander的初次体验

    从汉化新世纪下载到最新的TC张学思版后,运行文件只需依照其提示就可以完成该软件的安装.作为新手初次运行体验了以下功能: 一.目录跳转 1. 初次启动TC软件界面截图: 2. 按下Ctrl+d后,直接再 ...

  9. centOS系统将php升级到5.6 安装扩展

    在文章中,我们将展示在centOS系统下如果将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...

  10. 无侵入进行SDK的初始化

    话不多说,下面开始,nagios具体的介绍,可以搜一下,这篇文章为作者在实际操作中整理出来,写出来的都是负责人的内容~ 环境准备 此文档共用2台服务器的配置,操作系统均为centOS6.7,安装用户都 ...