目录
Java基础语法之数据类型转换、运算符、方法入门
一、数据类型转换
1. 自动转换(隐式)
-
将取值范围小的类型自动提升为取值范围大的类型。
-
特点:代码不需要进行特殊处理,自动完成
-
规则:数据范围从小到大, byte、short、char —> int —> long —> float —> double
public class Demo01DataType{ public static void main(String[] args){ byte a = 20; //符合将范围小的类型赋值给范围大的类型 short b = a; System.out.println(b); //20 //错误:将short-->byte //a = b; //错误:将long-->int //int c = 100L; //将默认int-->long long d = 100; System.out.println(d); //100 } }
2. 强制转换(显式)
-
将取值范围大的类型强制转换成取值范围大的类型。
-
转换格式:
数据类型 变量名 =(数据类型)被转数据值
-
注意:
- 浮点数转成整数,直接取消小数点,可能造成精度损失
int
强制转成short
砍掉2个字节,可能造成数据丢失。
3. 注意事项
-
强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
-
boolean
类型不发生数据类型转换。 -
byte、short、char
这三种类型都可以发生数学运算。 -
byte、short、char
这三种类型在运算的时候,都首先会提升为int
类型,然后再计算。byte a = 40; byte b = 50; //正确:byte + byte ——> int + int ——> int int result1 = a + b; System.out.println(result1); // 90 byte c = 40; byte d = 50; //错误:byte + byte ——> int + int ——> int byte result2 = c + d; System.out.println(result2);
4. ASCII编码表
二、运算符
1. 算术运算符
-
两个常量之间可以进行数学运算
System.out.println(1 + 2)
-
两个变量之间可以进行数学运算
int a = 10; int b = 10; System.out.println(a + b)
-
常量与变量之间可以进行数学运算
int a = 10; System.out.println(a + 10);
-
对于整数的表达式,除法用的是整除,整数除以整数,结果仍然是整数。
int a = 10; System.out.println(a / 3); //3 System.out.println(a % 3); //1
-
一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
int a = 10; // int + double ——> double + double ——> double double result = a + 0.5; System.out.println(result); //10.5
-
四则运算当中的加号
+
有常见的三种用法: -
对于数值来说,就是加法;
-
对于字符
char
类型来说,在计算之前,char
会被提升为int
,然后再计算; -
对于字符串
String
(首字母大写,并不是关键字)来说,加号代表字符串连接操作。任何数据类型
和字符串进行连接时,结果都会变成字符串。String str1 = "Hello"; System.out.println(str1); // Hello System.out.println("Hello" + "World"); // HelloWorld String str2 = "java"; System.out.println(str2 + 20); //java20 System.out.println(str2 + 20 +30); //java2030 System.out.println(str2 + (20 + 30)); //java50
-
自增\自减运算符
-
只有变量才可以使用自增自减运算符,常量不可以。
-
单独使用:不和其他任何操作混合,自己独立成为一个步骤。在单独使用的时候,前
++
和后++
没有任何区别。 -
混合使用:和其他操作混合。在混合使用时有重大区别。
-
如果是前++,那么变量立即+1,然后使用+1后的结果。先加后用
-
如果是后++,那么首先使用变量本来的数值,然后再让变量+1。先用后加
int num1 = 20; System.out.println(++num1); // 21 System.out.println(num1); //21 int num2 = 20; System.out.println(num2++); //20 System.out.println(num2); //21 int num3 = 20; int result1 = --num3; System.out.println(result1); // 19 System.out.println(num3); // 19 int num4 = 20; int result2 = num4--; System.out.println(result2); // 20 System.out.println(num4); // 19 int x = 10; int y = 20; int result3 = ++x + y--; System.out.println(result3); //31 System.out.println(x); //11 System.out.println(y); //19
-
-
2. 赋值运算符
-
复合赋值运算符其中隐含了一个强制类型转换。
byte num = 30; //num = num + 5; //num = byte + int //num = int + int //num = int //num = (byte)int num += 5; System.out.println(num); //35
3. 比较运算符
- 如果进行多次判断,不能连着写。
4. 逻辑运算符
- 逻辑运算符只能用于
boolean
值; - 与、或需要左右各自有一个
boolean
值,但是取反只要有唯一的一个boolean
值即可;
5. 三元运算符
-
格式:
数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B;
int a = 10; int b = 20; int max = a > b ? a : b; System.out.print;n(max); // 20
-
注意
-
必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
//错误 int result = 3 > 4 ? 2.5 : 10;
-
三元运算符的结果必须被使用。
System.out.println(a > b ? a : b); //错误 a > b ? a : b
-
三、方法入门
1. 方法的定义
-
格式:方法名称的命名规则使用小驼峰式。
public static void funcName(){ funcbody }
-
方法定义的先后顺序无所谓。
-
方法的定义不能产生嵌套包含关系。
-
方法定义好之后,不会执行的。如果想要执行,一定要进行方法的调用。
2. 方法的调用
- 调用方法:
funcName();
四、JShell简单使用
- 打开
- 使用
- 关闭
五、编译器的两点优化
1. 对于byte/short/char
三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含的为我们补上一个(byte)/(short)/(char)
。
- 如果右侧没有超过左侧的范围,编译器补上强转。
- 如果右侧超过了左侧范围,那么编译器直接报错。
2. 编译器的常量优化
- 在给变量进行复制的时候,若右侧表达式当中全都是常量,没有任何变量,那么编译器
javac
将会直接将若干个常量表达式计算得到结果。编译之后,得到的.class
字节码文件当中已直接计算出。 - 注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。