要求变量的使用要严格符合规定,所有变量必须先定义后才能使用
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,就能做到对结果的正确转换
原文:https://www.cnblogs.com/Jie-Yang/p/14729985.html