数据类型
-
强类型语言,变量的使用要求严格符合规定,所有变量都必须先定义后使用(Java,C)
-
弱类型语言,变量使用可以不严格符合规定(CB,JS)
基本类型
注意byte也是整数类型;boolean虽然用一位可以表示,但是计算机允许分配内存最小单位是1字节,所以boolean类型占一个字节
整数类型
整数类型正负转换:~(var-1);正数的原码反码补码相同,负数的原码为正数原码符号位取反,反码为原码除符号位取反,补码为反码加1
整数类型的范围:-2^(n-1) ~ 2^(n-1)-1
Java整型常量(具体值)默认为int,声明long型常量需加L
int n1 = 1;
int n2 = 1L;//编译错误
浮点类型
浮点型存放形式为:符号位+指数位+尾数位;尾数部分可能丢失,造成精度损失;建议不确定精度的情况下使用double
Java浮点型常量(具体值)默认为double,声明float型常量需加F;注意float定义时要加F标记
float number = 50.1F;
浮点数使用陷阱:
double n1 = 2.7;
double n2 = 8.1 / 3;//接近2.7
/*
*注意不要对两个运算过后的小数进行相等比较,而是判断两个值的差值是否再一个精度范围内
*/
字符类型
-
占两个字节,可以存放汉字;
-
字符常量用单引号引用’’
-
也可以直接存放一个数字,表示Unicode码
-
再Java中char本质上是一个整数,在输出时,将其转换Unicode码对应的字符
-
char也支持运算,相当于一个整数
-
char在内存中是Unicode对应的整数
char c1 = 97;//输出A
char c2 = 'R';//""引用的表示字符串
System.out.println('a' + 10);//输出107
计算机编码方式
Java 语言内部使用的是 Unicode 字符集,存储一个字符时,支持 UTF-16 和 LATIN1 两种编码方式。但其实,Java 内部还实现了 ASCII、UTF-8 编码,可以很容易实现这些编码之间的相互转换。Unicode兼容ASCII,前127个字符与ASCII一样。
布尔类型
不可以使用0或非0的整数来代替false和true
boolean bool = 1;/编译错误
基本数据类型转换
- 自动类型转换:在赋值和运算时自动转换,精度小的自动转换成精度大的;(byte,short)和char之间不会自动转换;byte,short和char之间可以进行计算(混合或单独运算),计算时首先转换为int类型;boolean类型不参与类型的自动转换
byte b1 = 1;
byte b2 = 1;
short s1 = 1;
short s2 = b1 + s1;//错误,byte和short计算得到int类型结果
byte b3 = b1 + b2;//错误,byte和byte计算也得到int类型结果
- 强制类型转换:将容量大的类型转换成容量小的类型,要使用强制转换符(),但可能造成精度降低或溢出。
//强转符号只对最近的操作数有效,往往会使用小括号提升优先级 int x = (int)10 * 3.5;//只对10有效,编译错误 int x = (int) (10 * 3.5 + 1.5);//正确 //char类型可以保存int常量值,但不能保存int变量 char c1 = 100;//ok int m = 100; char c2 = m;//错误
基本数据类型和String类型的转换
String不是基本类型,而是数组类型
基本类型转String
//基本类型的值+""
int n1 = 1;
String str1 = n1 + "";
String转基本类型
通过基本类型的包装类调用parseXX方法
Integer.parseInt("123");
运算符
是一种特殊符号,用以表示数据的运算、赋值、比较
算数运算符
赋值的过程引入了中间变量