数据类型
强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
Java的数据类型分为两大类
-
基本类型(primitive type)
- 数值类型
- 整数类型
- byte占1个字节范围:-128-127
- short占2个字节范围:-32768-23768
- int占4个字节范围:-2147483648-2147483648
- long占8个字节范围:-9223372036854775808-9223372036854775808
- 浮点类型
- float占4个字节
- double占8个字节
- 字符类型char占2个字符
- 整数类型
- boolean类型:占1位其值只有true和false两个
- 数值类型
-
引用类型(reference type)
- 类
- String
- BigDecimal 数学工具类
- 接口
- 数组
面试题:Java基础八大类型有哪些?
- 类
扩展
-
整数扩展
-
//进制: 二进制0b 十进制 八进制0 十六进制0x int i = 10; int i2 = 010; //八进制0 int i3 = 0x10; // 十六进制0x 0~9 A~F 16
-
-
浮点数
-
// float 有限 离散 舍入误差 大约 接近但不等于 // 最好不要使用浮点数进行比较 float f = 0.1f; //0.1 double d = 1.0/10; //0.1 if(f==d){}//返回false float d1 = 12321312312312f; flaot d2 = d1+1; if(d1==d2){}//返回true
-
面试题:银行业务怎么表示?钱
DigDecimal 数学工具类
-
-
字符
-
char c1 = 'A'; char c2 = '中'; System.out.println((int)c1); //强制转换成Unicode对应的数值 System.out.println((int)c2); //强制转换成Unicode对应的数值 char c3 = '\u0061'; System.out.println(c3);//a
-
-
转义字符
- \n 换行
- \t 制表符
-
布尔值扩展
-
boolean flag = true if(flage){ }
类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
低 --------------------------------> 高 byte,short,char-> int -> long -> float -> double
运算中,不同类型的数据先转换为同一类型,然后进行运算。
强制转换和自动类型转换
// 强制转换 (类型)变量名 高-->低 int i = 128 byte b = (baye)i; //内存溢出,byte最大值为127 // 自动转换 低-->高 int i = 128 double i =i; // 精度问题,小数点后面的数丢失 System.out.println((int)23.7) // 23 System.out.println((int)-45.89f) // -45 // char的强制转换 char c ='a'; int d = c+1; System.out.println(d); // 输出98 System.out.println((char)d); // 输出b
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换到低容量的时候,需要强制转换
- 转换的时候可能存在内存溢出,或者精度的问题
-
// 操作比较大的数的时候,注意溢出问题
// JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years; // -1474836480,计算是已经溢出
long total2 = money*years; // 默认是int,转换之前就已经存在问题
// 解决方式
long total2 = money*((long)years); // 先吧一个数转换为long