`
BrokenDreams
  • 浏览: 249066 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
68ec41aa-0ce6-3f83-961b-5aa541d59e48
Java并发包源码解析
浏览量:97973
社区版块
存档分类
最新评论

Java lang包-Boolean

 
阅读更多
         Boolean类是Java中基本类型boolean的包装类。这个类比较简单,直接看源代码吧。
public final class Boolean implements java.io.Serializable,
                                      Comparable<Boolean>

         可以看到有final修饰,说明这个类是不能被继承的,而且是可序列化和可比较的。

         Boolean内部以一个boolean型的私有域来保存状态。
/**
     * The value of the Boolean.
     *
     * @serial
     */
    private final boolean value;

         这个私有域是final型的,所以Boolean类型的实例是一个不变量。

/** 
     * The <code>Boolean</code> object corresponding to the primitive 
     * value <code>true</code>. 
     */
    public static final Boolean TRUE = new Boolean(true);

    /** 
     * The <code>Boolean</code> object corresponding to the primitive 
     * value <code>false</code>. 
     */
    public static final Boolean FALSE = new Boolean(false);

          Boolean类提供了两个静态实例(注意它们是final的),我们应当优先使用这两个现成的实例,而不是创建新的实例,这样能节省一些空间(一个Boolean对象的大小是24字节)和时间开销。

public static final Class<Boolean> TYPE = Class.getPrimitiveClass("boolean");

       这里还有一个静态域TYPE,用来表示基本类型boolean对应的class对象。
      System.out.println(Boolean.TYPE);//boolean
      System.out.println(Boolean.class);//class java.lang.Boolean


       Boolean类里提供静态的valueOf方法,如下:
public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
public static Boolean valueOf(String s) {
	return toBoolean(s) ? TRUE : FALSE;
    }

        上面说了我们们应该优先使用静态实例,但如果我们拿到一个boolean或者能表示boolean的字符串(比如“true”),我们就应该使用valueOf方法来得到包装类,好处还是省空间时间开销。
        而且Java中对基本类型boolean的自动装箱(在编译为class过程中进行)就是使用的救就是valueOf(boolean b)。

        最后看看hashcode方法。
public int hashCode() {
	return value ? 1231 : 1237;
    }

        看到这里一定会有疑问,为毛是这两个数?
我们知道hashCode方法的作用是当对象存放散列表中时,有一个良好的分布。所以这里选择了2个素数;而且一般复杂对象的hashCode的计算会根据其域对象的hashCode来计算,所以这里的2个素数也是较大的素数。具体可参考boolean-hashcode
分享到:
评论

相关推荐

    commons-lang3-3.1 API

    lang.exception包用于处理Java标准API中的exception,为1.4之前版本提供Nested Exception功能;lang.math包用于处理数字;lang.mutable用于包装值型变量;lang.time包提供处理日期和时间的功 能。 org.apache....

    JAVA--达内培训笔记

    系统会在每个java程序中隐含导入了java.lang这个包 8、java中的注释, 单行注释 //...... 多行注释 /* .......*/ 文档注释/** ........(换行标签)*/,用javadoc命令可以根据原码中的文档注释生成注释文档(html...

    java包装类相关方法.txt

    1、所属的包 java.lang 2、类的继承关系、实现接口 前面6个包装类是与数字相关的 父类:Number Boolean、Character 父类:Object 8个包装类实现的接口:Serializable ,Comparable 3、构造方法 ...

    jdbc 帮助类 java 自带连接池 v1.01

    boolean delete(java.lang.String sql, java.util.Map&lt;java.lang.Integer,java.lang.Object&gt; elements) 根据传入的参数删除单条记录的方法 boolean delete(java.lang.String sql, java.lang.Object[] elements)...

    js-to-java:将js对象包装为java对象的简单方法

    js到java 将js对象包装为java对象的简单方法。 在,我们需要使用js对象编写Java类名,以便使其编码为write类。安装$ npm install js-to-java用法...// =&gt; {$class: 'java.lang.Boolean', $: true}// Java: short[] s

    java jdbc帮助类 v1.0 自带连接池

    boolean delete(java.lang.String sql, java.util.Map&lt;java.lang.Integer,java.lang.Object&gt; elements) 根据传入的参数删除单条记录的方法 boolean delete(java.lang.String sql, java.lang.Object[] elements)...

    java pdf 查看器

    import java.lang.reflect.InvocationTargetException; /** * A demo PDF Viewer application. */ public class PDFViewer extends JFrame implements KeyListener, TreeSelectionListener, PageChangeListener...

    Java加载。jar包

    在java.lang包里有个ClassLoader类,ClassLoader 的基本目标是对类的请求提供服务。当 JVM 需要使用类时,它根据名称向 ClassLoader 请求这个类,然后 ClassLoader 试图返回一个表示这个类的 Class 对象。通过覆盖...

    amp-java:AMP的Java实现

    amp-java ... AMP Boolean = java.lang.Boolean 或 boolean AMP 浮点数 = java.lang.Double 或 double AMP 十进制 = java.math.BigDecimal AMP 日期时间 = java.util.Calendar AMP ListOf = java

    cxf(jax-ws)+spring+hibernate整合包

    wsn-core-2.7.6.jar,cxf-xjc-boolean-2.6.2.jar,cxf-xjc-bug671-2.6.2.jar,cxf-xjc-dv-2.6.2.jar,cxf-xjc-runtime-2.6.2.jar,cxf-xjc-ts-2.6.2.jar,dom4j-1.6.1.jar,ehcache-1.2.3.jar,ehcache-core-2.5.1.jar,ejb3-...

    jboss-exp.rar

    java.lang.Boolean $content$内容是同目录下的shell.jsp文件内容 即:将shell.jsp文件上传到服务器上,最终部署的war访问: http://192.168.7.84:10081/myname/index.jsp 如果有mynameok 表示部署成功 使用client....

    struts_2.3.12GA_API文档(chm版本)

    java.lang.Object 继承者 com.opensymphony.xwork2.ActionSupport 所有已实现的接口: Action, LocaleProvider, TextProvider, Validateable, ValidationAware, Serializable 直接已知子类: ...

    java源码剖析-JavaSourceLearn:JDK1.8源码的代码分析和学习

    1、java.lang 1) Object 1 2) String 1 3) AbstractStringBuilder 1 4) StringBuffer 1 5) StringBuilder 1 6) Boolean 2 7) Byte 2 8) Double 2 9) Float 2 10) Integer 2 11) Long 2 12) Short 2 13) Thread

    Collections源码java-jdk1.8-source-analysis:Java8源码分析,J.U.C、ThreadPool、Col

    Collections ...1、java.lang 1) Object 1 2) String 1 3) AbstractStringBuilder 1 4) StringBuffer 1 5) StringBuilder 1 6) Boolean 2 7) Byte 2 8) Double 2 9) Float 2 10) Integer 2 11) Long 2 12)

    随机模拟java数据插件Jmockdata.zip

    boolean.class,Boolean.class,boolean[].class,Boolean[].class, char.class,Character.class,char[].class,Character[].class, String.class,String[].class, BigDecimal.class,BigDecimal[].class, ...

    java业务层框架开发ibatis(java源码)

    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql....

    jboss_exploit_fat

    java.lang.Boolean $content$内容是同目录下的shell.jsp文件内容 即:将shell.jsp文件上传到服务器上,最终部署的war访问: http://192.168.7.84:10081/myname/index.jsp 如果有mynameok 表示部署成功 使用client....

    jboss xml漏洞exp

    java.lang.Boolean $content$内容是同目录下的shell.jsp文件内容 即:将shell.jsp文件上传到服务器上,最终部署的war访问: http://192.168.7.84:10081/myname/index.jsp 如果有mynameok 表示部署成功 使用client....

    史上最全Java面试题目大集合

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...

    JAVA程序员面试宝典

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 2、应用服务器与WEB SERVER的区别?应用服务器:Weblogic、Tomcat、Jboss; WEB ...

Global site tag (gtag.js) - Google Analytics