我看JAVA 之 基本数据类型与封装类型
我看JAVA 之 基本数据类型与封装类型
注:基于jdk11
java提供了8中基本数据类型,其中1个布尔类型,6个数字类型,1个字符类型。同时jdk为这8种基本数据类型提供了相应的封装类型。
boolean & Boolean
-
boolean
- 长度为1位
- 数据范围:只有两个值true、false
- 默认值为false
-
Boolean
- boolean的封装类型
- 实现了Serializable、Comparable接口
-
重要的成员变量
public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); private final boolean value; public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
-
重要的方法
@HotSpotIntrinsicCandidate public boolean booleanValue() { return value; } @HotSpotIntrinsicCandidate public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }
byte & Byte
-
byte
- 长度为1个字节,有符号
- 数据范围:最小值-2^7,最大值2^7-1 即[-128, 127]共256个数字
- 默认值为0
-
Byte
- 继承了Number类, Number抽象类定义了类型转换的抽象方法如intValue()longValue()floatValue()等,并实现了序列化接口
- 实现了Comparable接口
-
重要的成员变量
public static final byte MIN_VALUE = -128; public static final byte MAX_VALUE = 127; @SuppressWarnings("unchecked") public static final Class<Byte> TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");
-
重要的方法
@HotSpotIntrinsicCandidate public static Byte valueOf(byte b) { final int offset = 128; return ByteCache.cache[(int)b + offset]; } @HotSpotIntrinsicCandidate public byte byteValue() { return value; }
-
缓存机制
private static class ByteCache { private ByteCache(){} static final Byte cache[] = new Byte[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Byte((byte)(i - 128)); } }
静态内部类ByteCache内部的静态Byte[]缓存了Byte的全部256个数据。
int & Integer
-
int
- 长度为4个字节,有符号
- 数据范围:最小值-2^31,最大值2^31-1 即[0x80000000, 0x7fffffff]
- 默认值为0
-
Integer
- 继承了Number类
- 实现了Comparable接口
-
重要的成员变量
@Native public static final int MIN_VALUE = 0x80000000; /** * A constant holding the maximum value an {@code int} can * have, 2<sup>31</sup>-1. */ @Native public static final int MAX_VALUE = 0x7fffffff; /** * The {@code Class} instance representing the primitive type * {@code int}. * * @since 1.1 */ @SuppressWarnings("unchecked") public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int"); /** * All possible chars for representing a number as a String */ static final char[] digits = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' }; @Native public static final int SIZE = 32; 32位 public static final int BYTES = SIZE / Byte.SIZE; 32/8=4 4个字节
-
重要的方法
@HotSpotIntrinsicCandidate public static String toString(int i) { int size = stringSize(i); if (COMPACT_STRINGS) { byte[] buf = new byte[size]; getChars(i, size, buf); return new String(buf, LATIN1); } else { byte[] buf = new byte[size * 2]; StringUTF16.getChars(i, size, buf); return new String(buf, UTF16); } } //使用缓存IntegerCache,使用valueOf在空间和时间上要优于直接使用构造方法 @HotSpotIntrinsicCandidate public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } @HotSpotIntrinsicCandidate public int intValue() { return value; }
-
有意思的方法:
System.out.println(Integer.numberOfLeadingZeros(18)); System.out.println(Integer.numberOfTrailingZeros(1000)); System.out.println(Integer.bitCount(1)); System.out.println(Integer.bitCount(2)); System.out.println(Integer.bitCount(4)); System.out.println(Integer.bitCount(12)); 打印结果如下: 27 整数18在二进制表示中首部有27个连续的0 3 整数1000在二进制表示中尾部有3个连续的0 1 整数1在二进制表示中有1位是1 1 整数2在二进制表示中有1位是1 1 整数4在二进制表示中有1位是1 2 整数12在二进制表示中有2位是1
-
缓存机制
private static class IntegerCache { static final int low = -128; static final int high; //通过设置-XX:AutoBoxCacheMax=<size>,指定high的值,默认缓存范围为[-128,127] static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} }
验证缓存代码示例:
package chapter01; public class TestInteger { public static void main(String [] args) { Integer a = Integer.valueOf(6); Integer b = new Integer(6); Integer c = 6; System.out.println(a==b); System.out.println(a==c); System.out.println(c==b); Integer a1 = Integer.valueOf(600); Integer b1 = new Integer(600); Integer c1 = 600; System.out.println("\n"); System.out.println(a1==b1); System.out.println(a1==c1); System.out.println(c1==b1); } } 打印结果: false true false false false false 建议: 包装类型比较是否相等使用equals()而非==
long & Long
-
long
- 长度为8个字节,有符号
- 数据范围:最小值-2^63,最大值2^63-1 即[0x8000000000000000L, 0x7fffffffffffffffL]
- 默认值为0
-
Long
类似 integer,读者可以自己去分析
float & Float
-
float
- 是单精度、长度为4个字节共32位、符合IEEE 754标准的浮点数
- 默认值为0.0f
- float与double精度不同,所以在将float与double强制转换的时候会出现精度丢失的问题
-
Float
- 继承了Number类, Number抽象类定义了类型转换的抽象方法如intValue()longValue()floatValue()等,并实现了序列化接口
- 实现了Comparable接口
- 重要的成员变量
public static final float POSITIVE_INFINITY = 1.0f / 0.0f; 正无穷 public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;负无穷 public static final float NaN = 0.0f / 0.0f; //不是数字 Not a Number public static final float MAX_VALUE = 0x1.fffffeP+127f; // 3.4028235e+38f public static final float MIN_NORMAL = 0x1.0p-126f; // 1.17549435E-38f public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f //最大、最小指数 public static final int MAX_EXPONENT = 127; public static final int MIN_EXPONENT = -126; //32位,4个字节 public static final int SIZE = 32; public static final int BYTES = SIZE / Byte.SIZE; @SuppressWarnings("unchecked") public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");
double & Double
-
double
- 是双精度、长度为8个字节共64位、符合IEEE 754标准的浮点数
- 默认值为0.0d
-
Double
类似 Float,读者可以自己去分析
short & Short
-
short
- 长度为2个字节,有符号
- 数据范围:最小值-2^15,最大值2^15-1 即[-32768, 32767]
- 默认值为0
-
Short
类似 Integer,读者可以自己去分析
char & Character
-
char
- 单个unicode字符,长度为16位
- 数据范围:最小值0,最大值65535 即[0, 65535]
- 默认值为""
- Character
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一周精通Vue(二)组件访问、插槽、组件作用域、模块化
组件之间的访问方式 $children 父组件通过 this.$children[index] 可以访以对象的形式问子组件 一般来说index取值会有不稳定性 $.refs(常用) 父组件通过 this.$refs.name name为ref的值 通过给子组件添加ref属性来获取自定组件对象 去操作 $.parent 子组件通过 this.$parent 访问父组件 拿到父组件对象 $.root 子组件通过 this.$root方法来访问根组件 即Vue实例 插槽 slot 标签 表示这个是一个插槽 基本使用:<slot></solt> 如果有多个值,同时放入到组件进行替换时 一起作为替换元素 <div id="app"> <cpn> <!-- 插槽赋值--> <button> 按钮</button> </cpn> <!-- 默认会将所有内容替换到插槽--> <cpn> <div>我是div</div> <button>新按钮<...
- 下一篇
认识Java异步编程
一 、认识异步编程 通常Java开发人员喜欢使用同步代码编写程序,因为这种请求(request)/响应(response)的方式比较简单,并且比较符合编程人员的思维习惯;这种做法很好,直到系统出现性能瓶颈;在同步编程方式时由于每个线程同时只能发起一个请求并同步等待返回,所以为了提高系统性能,此时我们就需要引入更多的线程来实现并行化处理;但是多线程下对共享资源进行访问时,不可避免会引入资源争用和并发问题;另外操作系统层面对线程的个数是有限制的,不可能通过无限的增加线程数来提供系统性能;最后使用同步阻塞的编程方式还会导致浪费资源,比如发起网络IO请求时候,调用线程就会处于同步阻塞等待响应结果的状态,而这时候调用线程明明可以去做其他事情,等网络IO响应结果返回后在对结果进行处理。 可见通过增加单机系统线程个数的并行编程方式并不是灵丹妙药;通过编写异步、非阻塞的代码,则可以使用相同的底层资源将执行切换到另一个活动任务,然后在异步处理完成后在返回到当前线程进行继续处理,从而提高系统性能。 异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且等工作...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主