数据类型及其扩展知识
public class Demo1 {
public static void main(String[] args) {
//八大基本数据类型
//易错点
long num1 = 30L; //long类型要在数字后面加个L以辨别
float num2 = 50.2F; //float类型要在数字后面加个F
char code1 = 'A'; //char类型代表一个字符
//字符串 String不是关键字,是一个类
String name = "name";
//布尔值
boolean flag1 = true;
boolean flag2 = false;
//============================================
//整数扩展: 进制
/*
二进制0b
十进制
八进制0
十六进制0x
*/
int i1 = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x
// System.out.println(i1);//10
// System.out.println(i2);//8
// System.out.println(i3);//16
//============================================
//浮点数扩展? 银行业务怎么表示?
//不要使用浮点数型,使用BigDecimal 数学工具类
//============================================
//float double 是有限 离散的,会舍入误差,是个大约数,接近但不等于
//最好完全避免使用浮点数比较
//最好完全避免使用浮点数比较
//最好完全避免使用浮点数比较
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d);//false
// System.out.println(f);//0.1
// System.out.println(d);//0.1
float d1 = 232323232f;
float d2 = d1 + 1;
System.out.println(d1 == d2);//true
//============================================
//字符扩展
//============================================
char c1 = 'a';
char c2 = '中';
// System.out.println(c1);
// System.out.println((int)c1);//33 (int)是强制转换
// System.out.println(c2);
// System.out.println((int)c2);//20013
//所有字符本质还是数字
char c3 = '\u0061';
// System.out.println(c3);//a
//转义字符
// \t 制表符
// \n 换行 等等
System.out.println("===================");
String sa = new String("hello");
String sb = new String("gello");
System.out.println(sa==sb);//false
String sc = "hello";
String sd = "gello";
System.out.println(sc==sd);//true
//因为对象 和 内存 以后再去学具体原因
//============================================
//布尔值扩展
//============================================
boolean flag = true;
if(flag == true){}
if(flag){}//两者意义一致
//Less is more!精简易读
}
}
数据类型转换
数据在运算的时候会依数据容量从低到高自动转换,如果是高容量类型转低容量类型就要使用强制转换函数。
public class Demo2 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i;//内存溢出
System.out.println(i);//128
System.out.println(b);//-128
}
}
因为byte的表示范围是-128 到 127 ,所以把i的值赋给b的话会产生内存溢出的现象
强制转换的方法 (类型名)变量名
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
System.out.println((int)45.7);//45
System.out.println((int)-39.87);//-39
如代码所示,浮点数转整型会损失精度。
char c = 'a';
int d = c+1;
System.out.println(d);//98
System.out.println((char)d);//b
如代码所示char与int的关系
其他内容扩展
int money = 10_0000_0000;
System.out.println(money);//1000000000
数字可以用_分割,输出的时候不会输出这个符号,用来处理大数字的时候特别方便
int money = 10_0000_0000;
int years = 20;
int total = money*years;
System.out.println(total);
此时total输出-1474836480
此时计算溢出了
如果将total改成long类型呢
int money = 10_0000_0000;
int years = 20;
long total = money*years;
System.out.println(total);
也会得到一样的结果,因为money和years相乘之后得到的结果默认是int类型,相乘得到结果之后,才转换为long类型。
int money = 10_0000_0000;
int years = 20;
long total = ((long)money)*years;
System.out.println(total);
这样改就不会存在溢出问题了