基本数据类型
java是强类型语言,必须为每一个变量声明一种类型。
一、共有8种基本类型:4种整型,2种浮点型,1种字符型,1种布尔类型。位(bit)是计算机最小单位,用0或1表示,也就是2进制。1个字节(byte)是8位。
1. 整型:表示没有小数部分的数值,可以是负数。
类型 | 存储需求 | 取值范围 |
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2147483648~2147483647(正好超过20亿) |
long | 8字节 | -9223372036854775808~9223372036854775807 |
通常情况下,int最常用。特殊情况下,例如地球上的居住人数,那就要使用long,要加后缀L(推荐)或者l。byte和short用于特定场合,例如底层文件处理。
2. 浮点类型:表示有小数部分的数值,可以是负数。不能出现正无穷大、负无穷大、NaN(不是一个数字)的情况。
类型 | 存储需求 | 取值范围 |
float | 4字节 | 大约±3.40282347E+38F(有效位数为6~7位) |
double | 8字节 | 大约±1.79769313486231570E+308(有效位数为15位) |
double的数值精度是float的两倍,通常情况下都采用double。如果需要使用float类型,要加后缀F(推荐)或者f。没有后缀的浮点型数值,默认为double类型。
3. 字符型char:占2字节。表示单个字符,用单引号括起来,例如'A',但有些Unicode字符需要两个char值。在java中,char类型描述了UTF-16编码中的一个代码单元。不建议在程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将String作为抽象数据类型。
4. 布尔类型boolean:只有true(成立)和false(不成立)两个值,用来判断逻辑条件。
二、相互间的转换
以上都是小转大,属于自动转换,其中:实线箭头表示无精度损失的转换,虚线箭头表示可能有精度损失的转换。如果是大转小,需要强制类型转换,也有可能有精度损失。
int a = 10; double b = 10.5; /** \* ①a从int类型自动转换为double类型 \* ②计算a+b \* ③得到double类型的值 */ double num0 = a + b; System.out.println(num0);// 输出20.5 /** \* ①②③相同 \* ④double类型的值赋给int类型,强制类型转换。 */ int num1 = (int)(a + b); System.out.println(num1);// 输出20,出现精度丢失的情况。
对两个数值进行运算操作,需要先将两个操作数转换为同一类型,然后再进行计算:
- 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
- 如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
- 如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
- 都不是上述类型,两个操作数都将被转换为int类型。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
cheerp 交叉编译aes库
这个文章主要演示了一个cheerp交叉编译的简单的例子对比测试。这个例子中我们把一个c文件的算法交叉到js侧。 先行准备 我们分别使用js的一个aes库,和交叉过去的一个c实现的库分别分别在node和浏览器端做性能比较。 先把c算法库交叉到一个bc(clang 的byte code)备用, 验证好执行正确结果。 clang -c -w $(CHEERP_FLAG) $(WASMFLAGS) -O3 -o ./build/aes.bc aes.c clang++ -w $(CHEERP_FLAG) $(WASMFLAGS) $(WASM_LOADER) -D_MACRO_WASM_INIT -cheerp-no-math-imul -O3 -o ./build/test.wasm main.cpp ./build/aes.bc cheerp -wasm 执行结果 node开启 --wasm-opt 运行 wasm 执行 1000000次结果 397-459mschorme 1000000次结果 400-576ms js + aes.js 执行结果 node 缓存开启 运行 执行 1000...
- 下一篇
彻底弄懂 Java 线程池原理
概述 这篇文章是我在阅读源码时整理的一些笔记,对源码的关键点进行了比较详细的注释,然后加上一些自己对线程池机制的理解。最终目的是要弄清楚下面这些问题: 线程池有 execute() 和 submit() 方法,执行机制分别是什么? 如何新建线程? 任务如何执行? 线程如何销毁?超时机制如何实现? 首先需要介绍一下线程池的两个重要成员: ctl AtomInteger 类型。高3位存储线程池状态,低29位存储当前线程数量。workerCountOf(c) 返回当前线程数量。runStateOf(c) 返回当前线程池状态。 线程池有如下状态: RUNNING:接收新任务,处理队列任务。 SHUTDOWN:不接收新任务,但处理队列任务。 STOP:不接收新任务,也不处理队列任务,并且中断所有处理中的任务。 TIDYING:所有任务都被终结,有效线程为0。会触发terminated()方法。 TERMINATED:当terminated()方法执行结束。 Worker 这个线程在线程池中的包装类。一个 Worker 代表一个线程。线程池用一个 HashSet 管理这些线程。 需要注意的是,Wo...
相关文章
文章评论
共有0条评论来说两句吧...