1.变量
+号使用:
- 当左右两边都是数值型时,做加法运算
- 当左右两边有一方为字符串,做拼接运算
- 运算顺序是从左到右
2.数据
数据类型:(注意每个类型所占字节)
- java数据类型分为基本数据类型和引用类型两大类
- 基本数据类型有8种:数值型[byte,short,int,long,float,double] 字符型[char] 布尔型[boolean]
- 引用类型[类,接口,数组]
整数类型使用细节:
- 如果可以尽量使用int(变量声明),除非是不足以表示的大数才使用long
- java的整型常量默认为int型,声明long型常量须后加‘l’(小写l)或‘L’
- 1byte = 8bit
浮点类型:
- 浮点数=符号位+指数位+尾数位
- java的浮点型常量默认为double型,声明float型常量须后加‘f’或‘F’
- 十进制数形式0.xxx可以省略0,但是切记带上小数点:.xxx
- 科学计数法形式:5.12e2=5.12*10的2次方,5.12E-2=5.12/10的2次方
- 通常情况下应该使用double型,因为它比float型更精确。运行下方代码得出num1=2.123456789123,num2=2.1234567
public class var01 { public static void main(String[] args) { double num1 = 2.123456789123; float num2 = 2.123456789123F; System.out.println(num1); System.out.println(num2); } }
- 浮点数使用陷阱:2.7 和 8.1 / 3 的结果并不相同,运行的代码得出的num2是一个接近2.7的浮点数。(当我们对运算结果是小数的进行相等判断时要小心,应该以两个数的差值的绝对值在某个精度范围内判断)
public class var01 {
public static void main(String[] args) {
double num1 = 2.7;
double num2 = 8.1 / 3;
System.out.println(num1);
System.out.println(num2);
}
}
Java API文档
中文在线文档:https://www.matools.com-在线API-查找自己想要使用的工具
字符类型char
1.字符类型可以直接存放一个数字,转义符、字母、汉字均可存放(使用‘’括起来)
char c1 = 'a';
char c2 = '\t';
char c3 = '孙';
char c4 = 97;
几个快捷键:CTRL+shift+d可以把光标所在行进行复制并粘贴到下一行;ctrl+shift+k可以把光标所在整行删除
2.char的本质是一个整数,在输出时,是unicode码对应的字符
public class var01 {
public static void main(String[] args) {
char c1 = 97;
System.out.println(c1);
char c2 = 'a';
System.out.println((int)c2);
}
}
char c5 = 'a' + 1;//97+1==> 98
System.out.println((int)c5);//98
System.out.println(c5);//98对应的字符==> b
3.字符型本质讨论:
字符型存储到计算机中,需要将字符对应的码值(整数)找出来,比如‘a’
存储:‘a’ ==> 码值97 ==> 二进制(1100001)==> 存储
读取:二进制 => 97 ==> ‘a’ =>显示
布尔类型:
不可以用0或非0的整数来代替false和true(与c语言不同)
3.基本数据类型转换
-
自动类型转换:当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型。数据类型按精度大小排序为:(从左到右依次为精度由小到大)
//代码实例
int num = 'a';//char -> int
double d = 80;//int -> double
System.out.println(num);//97
System.out.println(d);//80.0
转换细节:
- 有多种类型的数据混合运算时,系统自动将所有数据转化为容量最大的那种数据类型然后再进行计算。
- (byte,short)和char之间不发生相互自动转换。陷阱案例如下。运行下面代码会在第三行报错,虽然我们前面提到整型常量默认为int型,那么第一行就是int型向byte型转换应该报错,但实际上第一行并不会报错,是因为当把一个具体数据赋给byte时会先判断该数是否在byte范围内,如果是就可以。但是经过第二行运行,此时n2已经 被定义为int型,所以在进行到第三行时会由于int型不和byte型互相转换报错。
byte b1 = 10; int n2 = 1; byte b2 = n2;
- byte,short,char三者可以直接计算,在计算时会首先转换成int类型。下面代码会出错因为在运算b2 + s1 时会把它们转换为int类型,但是int类型是无法像精度小的类型short转换的,所以会报错。
byte b2 = 1; short s1 = 1; short s2 = b2 + s1;
- 布尔类型boolean不参与自动转换
- 强制类型转换:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时加上强制转换符(),但是会造成精度降低或数据溢出,小心使用。
强制转换细节:
- 强转符号只针对最近的操作数有效,如果要强转一串式子可以用小括号来提升优先级。
int x = (int)(10*3.5+6*1.5)
- char类型可以保存int的常量值,但不能保存int的变量值,需要强转。
char c1 = 100; int m = 100; char c2 = m;//不可以,会报错 char c3 = (char)m;//正确写法
-
基本数据类型和String类型的转换
-
基本类型转String:在基本数据类型后直接+” “。
-
String转基本类型:通过基本类型的包装类调用parseXX方法。
String s5 = "123"; int num1 = Integer.parseInt(s5); double num2 = Double.parseDouble(s5); float num3 = Float.parseFloat(s5); long num4 = Long.parseLong(s5); byte num5 = Byte.parseByte(s5); boolean b = Boolean.parseBoolean("true"); short num6 = Short.parseShort(s5);
-
注意在将String类型转换为基本数据类型时,要确保String类型能够转成有效的数据。比如 我们可以把”123“转成一个整数,但是不能把”hello“转成一个整数。(且在编译过程并不会出错,在运行的时候才会抛出异常。)