要求变量的使用要严格符合规定,所有变量必须先定义后才能使用
byte 占1个字节范围:-128~127
short占2个字节范围:-32768~32767
int占4个字符范围:-21亿~21亿
long占8个字符范围:(反正就是超级超级大的范围)
注意一点:long类型变量在赋值的值后面要加一个L
long num = 30L
整数拓展
进制 :二进制0b 十进制 八进制0 十六进制0x
int i1 = 10; int i2 = 010;//八进制10,0只代表八进制转换十进制标志,后面的是八进制数; int i3 = 0x10;//十六进制10,0x只代表十六进制转换十进制标志,后面的是十六进制数; System.out.println(i1); System.out.println(i2); //结果为8 System.out.println(i3); //结果为16
float占4个字节
注意一点:float类型变量在赋值的值后面要加一个F
float num = 50.1F;
double占8个字节
浮点数拓展 使用BigDecimal类
为什么要使用BigDrcimal类?
//背景引入:float和double有其局限性 float f =0.1f; //0.1 double d = 1.0/10; //0.1 System.out.println(f == d);//判断是否相等,结果为False float d1 = 231323232323323313131313f; float d2 = d1 + 1; System.out.println(d1 == d2);//结果为true,此时出现了d1+1 == d1的情况 //最好完全避免使用浮点数进行比较! //最好完全避免使用浮点数进行比较! //最好完全避免使用浮点数进行比较!
char 占2个字节
字符类型拓展
char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1);//强制转换,结果为数字97 System.out.println(c2); System.out.println((int)c2);//强制转换,结果为数字 //所有的字符本质还是数字 //编码:Unicode表 2字节 0~65536 //U0000 ~ UFFFF char c3 = '\u0061';//0061为16进制,十进制为 6*16^1+1*16^0=97 System.out.println(c3);//输出为a; //转义字符 //\t 制表符 //\n 换行 //...(很多很多转义字符) System.out.println("Hello\tWorld"); System.out.println("Hello\nWorld"); System.out.println("============================================="); String sa = new String("Hello,World"); String sb = new String("Hello,World"); System.out.println(sa == sb);//输出为false; String sc = "Hello,World"; String sd = "Hello,World"; System.out.println(sc == sd);//输出为true; //对象 从内存分析
占1位且只有 true 和 false 两个
boolean类型拓展
boolean flag = true; //if (flag == true){} == if(flag){};
Less is more! 代码就要精简易读!
比如:String
由于Java是强类型语言,所以进行有些运算的时候,需要用到类型转换。
低---------------------------------------------------------------->高
byte,short,char —> int —> long —> float —> double
运算中,不同类型的数据先转化为同一类型,然后再进行运算。
强制转换:(类型)变量名; 高 ----> 低
自动转换:低 ----> 高
不能对布尔值进行转换
不能把对象类型转换为不相干的类型
在把大容量转换到低容量时,强制转换
转换的时候可能存在内存溢出,或者精度问题!
内存溢出:
int i = 128; byte b1 = (byte)i;//输出结果为-128,原因是byte类型最大值为127,赋值128后内存溢出 double b2 = i;//输出结果为128.0
精度丢失:
System.out.println((int)23.7); //23 System.out.println((int)-45.89f); //45
char c = 'a'; int d = c+1;//d = 98; 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 total3 = money * ((long)years);//先把其中一个数转换为long,就能做到对结果的正确转换