八种基本数据类类型
整数型: byte < short < int < long
小数型: float < double
字符型: char
布尔类型: boolean
基本数据类型的转换问题
强制类型转换:从大到小的转换就需要强制转
比如:
把小数转成整数,即明显从大到小的转换,需要加(int)强制类型转换
double a=10.50;
int b = (int)a;
自动类型转换:从小到大的转换,Java会自动转换
比如:
把短整型short转成整形int,Java会自动识别帮我们进行自动转换,无需我们手动强制转换
short a = 10;
int b = a;
常见的面试题目
1. 变量a和变量b都为byte类型,那么 a=a+b 结果是什么类型?a+=b 结果又是什么类型?
解答:a=a+b是int类型;byte 在参与数据运算的时候,会自动转换成整数类型int;
而a+=b是byte类型;a += b执行实际过程实际是先计算出a的值,然后用一个temp对象存储之后和b进行相加,然后将值赋值给a引用。
顺便一提,这两个操作符还有一个区别是+=如果两边的操作数的精度不一样时会自动向低转化,而a = a+b则不会自动转化,需要手动进行强制类型转化
2. a++是否是线程安全的?
解答:是线程不安全的;
因为包含读取,计算,写入三个步骤,不是原子的。
3. 怎么实现a++原子
(1) 对 i++ 操作的方法加同步锁,同时只能有一个线程执行 i++ 操作;
(2) 使用支持原子性操作的类,如 java.util.concurrent.atomic.AtomicInteger,它使用的是
CAS 算法,效率优于第 1 种;