本文共 1519 字,大约阅读时间需要 5 分钟。
1、整数常量,所有整数
2、小数常量、所有小数
3、布尔(boolean)型常量,较为特有,只有两个数值,true,false
4、字符常量,将一个数字字母或者符号用单引号(‘’)标识
5、字符串常量,将一个或多个字符用(“”)标识
6、null常量,只有一个数值就是:null
(1个字节=8个二进制位=8bit位)
1、八进制,十六进制与二进制的转换
八进制数:其实就是二进制位中,3个二进制位为一个八进制位
十六进制:其实就是二进制位中,4个二进制位为一个十六进制位
2.负数的二进制表现形式
其实就是将这个数的正数的二进制去翻,加1
取反:就是将0变为1,1变为0
(负的十进制数,二进制位的最高位是1)
1、内存中一个存放不确定数据的区域
2、该区域有自己的名称(变量名)和类型(数据类型)
3、该区域的数据可以再同一类型范围内不断变化
4、该区域可以不断地重复使用
1、基本数据类型
整数类型:byte(1个字节:-128~127)、short(2个字节:-32768~32767)、int(4个字节;-2^31~2^31-1)、long(8个字节)
浮点类型:float(4个字节)、double(8个字节)
字符型:char(0~65535)
布尔型:boolean
整数默认:int 小数默认:double
2、引用数据类型
类:class
接口:interface
数组:[ ]
例:
class Demo{ public static void main(String[] args){ //定义变量x的类型为int,变量a的类型为byte int x=5; byte a=1; x=x+a; System.out.println(x); } }
样例中,x在内存中占4个字节,a在内存中占1个字节,虽然两个变量所占的内存空间不一致,但是同为数值型,因为最终结果存储的位置是x,所以,系统会进行自动类型提升,将byte类型的变量a,自动提升为占内存4个字节的int型变量,因此输出结果为6。
注意:系统能进行自动类型提升的前提是等号两边同为数值型。
我们来看这样一组代码:
class Demo { public static void main(String[] args) { byte a=3; a=a+4; System.out.println(a); }}
这个代码在运行时,会出现这样的问题:
出现上面这个错误的原因,是在Java中,对于整数型数据,默认的类型为int,上面的代码中,4的数据类型便是int。因此4在内存中占用4个字节,而将4个字节的数值4,存放到内存大小为1个字节的变量a中,就会存在精度丢失,我们可以对代码进行如下修改,进行强制类型转换。
class Demo { public static void main(String[] args) { byte a=3; a=(byte)(a+4); //强制类型转换 System.out.println(a); }}
最终结果为:
未进行强制类型转换前的结果转换成二进制为:0000-0000 0000-0000 0000-0000 0000-0111
强制类型转换,会将高位的3个字节,直接丢弃掉,则原二进制变为:0000-0111。由此可见,强制类型转换的前提为,运算结果的大小,不能大于转换后内存的大小,否则就会产生精度丢失。
转载地址:http://tbirn.baihongyu.com/