Python 官方文档:入门教程 => 点击学习
目录前言类加载机制:对象实例化过程:补充:Boolean与boolean性能探究总结前言 上次一个同学问,Boolean 类型的值不是只有 true 和 false 两种吗?为什么
上次一个同学问,Boolean 类型的值不是只有 true 和 false 两种吗?为什么他定义的属性出现了 null 值?
我们应该先明确一点,boolean 是 Java 的基本数据类型,Boolean 是 Java 的一个类。boolean 类型会在“赋零值”阶段给属性赋 false。而 Boolean 是一个类,会在“赋零值”阶段给对象赋 null。
如果是静态属性,会在类加载时被赋值。如果是普通类属性,会在实例化对象时赋值。这两点可以了解一下“类加载机制”和“对象创建过程”。
所以说,Boolean只是被加载了,还没有被实例化,在被实例化之前并没有分配内存,所以是 null
接下来我们可以看看 Boolean 的属性和构造方法,了解一下它如何包装 boolean
// final boolean类型的属性,通过构造方法注入值
private final boolean value;
// 构造方法 Boolean a = true 实际上就是调用这个方法
public Boolean(boolean value) {
this.value = value;
}
// 构造方法
public Boolean(String s) {
this(parseBoolean(s));
}
对于其他的属性和方法,可以自行查看都比较简单
关于 Boolean 使用过程中有一个风险点,阿里巴巴开发手册也写得非常好
简单来说就是,boolean 定义的属性一定要有值,如果 Boolean 对象值为 null,解包过程中就会出现NPE。
想象一种场景:你女票问你:你爱我吗?但你没听清。如果你是 Boolean 就会回答,我没听清(null),如果你是 boolean 就会回答,不爱了 (false)
之后就会被打。
针对Boolean与true
单纯从源码角度看不出来那个性能上更加好;大布尔也是初始化了两个static对象
源码截图如下:
写了一个测试类:测试方式(获取大布尔类型true的时间 获取小布尔类型true的时间,通过100、1000、10000、100000次 看看那个时间更少的次数更多)
测试代码如下:
public class Test {
public static Boolean A() {
return Boolean.TRUE;
}
public static boolean D() {
return true;
}
public static String get() {
long i = 0L;
long j = 0L;
for (int n = 0; n < 100000; n++) {
long startTime = System.nanoTime();
D();
long endTime = System.nanoTime();
long booleanTime = endTime - startTime;
long start = System.nanoTime();
A();
long end = System.nanoTime();
long booleanca = end - start;
if (booleanca > booleanTime) {
i = i + 1;
} else {
j = j + 1;
}
}
return i+" "+j;
}
public static void main(String[] args) {
System.out.println("---100000次的比较结果---->"+get());
}
}
执行结果如下图:
到此这篇关于Java中Boolean和boolean区别的文章就介绍到这了,更多相关Java Boolean和boolean区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Java中Boolean和boolean的区别详析
本文链接: https://www.lsjlt.com/news/154215.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0