Java基础整理(一)
标识符
- 所有标识符都应该以字母(大写或小写)、美元符号($)或下划线(_)开始
- 首字符之后可以是字母(大写或小写)、美元符号($)、数字或下划线(_)组成
- 标识符具有大小写敏感
- 不能使用关键字作为变量名或方法名
数据类型
Java中数据类型分为两大类:基本类型、引用类型
1.八大基本类型
字节大小 | 表示范围 | |
---|---|---|
byte | 1个字节 | -128~127 |
short | 2个字节 | -32768~32767 |
int | 4个字节 | -21474836482147483647($-2^{31}$ 2 31 2^{31} 231-1) |
long | 8个字节 | − 2 63 -2^{63} −263~ 2 63 2^{63} 263-1(使用时在变量后加上L) |
float | 4个字节 | 使用时在变量后加上F |
double | 8个字节 | |
char | 2个字节 | 只能表示一个字符 |
boolean | 1个字节 | 只有true和false |
注:String不是关键字,而是属于类!!!!!!!!
2.引用数据类型
除八大基本类型外的数据类型,包括类、接口、数组
对类进行一些说明
示例代码:
public class HelloWorld {
public static void main(String[] args) {
String sa=new String("test");
String sb=new String("test");
System.out.println(sa==sb); //输出结果为false
String sc="test";
String sd="test";
System.out.println(sc == sd); //输出结果为true
}
}
造成两次输出结果不同的原因主要是:第一个虽然值都表示test,但分别new了两个对象,不同对象指向的地址是不同的。
3.八大基本类型拓展内容
-
整数拓展(进制)
标志 样例 二进制 0b int i=0b10; 八进制 0 int i=010; 十进制 int i=10; 十六进制 0x int i=0x10; -
浮点数拓展
float和double均会舍入误差,只是一个大约的数,所以最好不要使用浮点数进行比较!最好不要使用浮点数进行比较!
示例代码1:
public class Demo { public static void main(String[] args) { float f=0.1f; //0.1 double d=1.0/10; //0.1 System.out.println(f == d); //输出结果为 false } }
示例代码2:
public class Demo { public static void main(String[] args) { float d1=111111111f; float d2=d1+1; System.out.println(d1 == d2); //输出结果为true } }
因此,在对比较大的数字进行运算比较时,最好使用BigDecimal类!
方法一:
BigDecimal BigDecimal(String s);
方法二:
static BigDecimal valueOf(double d);
-
字符拓展
所有字符的本质就是数字,即字符可以转换成相应的数字。
-
类型转换
精度由低到高:byte,short,char ——> int ——> long ——> float ——> double
类型转换主要分为强制转换和自动转换两种
强制转换:由高精度向低精度的转换
**自动转换:**由低精度向高精度的转换
运算中,不同类型的输先转化为同一类型,再进行运算。
在转换过程中,需要注意的事项:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换成低容量的时候,进行强制转换
- 转换的时候可能存在内存溢出或精度问题
分析问题:
public class HelloWorld { public static void main(String[] args) { int money=20_0000_0000; int years=20; int total1=money*years; long total2=money*years; System.out.println(total1); //结果不正确 溢出! System.out.println(total2); //结果依然不正确 还是溢出! } }
那么问题来了!为什么我已经定义了long类型的total2变量结果却还是溢出了呢?
答案很简单,当把计算结果赋值给long类型的total2时,计算结果已经溢出了,并没有转换!
解决办法:
long total3=money*((long)years); //先把其中一个数进行类型转换再计算