前言
Java基础学习,本文将会介绍关于运算符的优先级,数据类型的转换问题,Scanner函数的简单使用方法,希望对大家有所帮助。
一、运算符的优先级问题
运算符的优先级在表达式中极为重要,稍不注意就会出现意想不到的结果…
例如:1 + 2 * 3表达式,小学生都知道答案应该是7,但是为什么不是9而是7呢?这就是运算符的优先级问题。我们从小就知道,四则运算乘除优先于加减,有括号先算括号中的。同样计算机中的运算符也有优先级。
详情请看下表:
优先级 | 运算符 | 类 | 综合性 |
---|---|---|---|
1 | () | 括号运算符 | 由左至右 |
2 | !、+(正号)、-(负号) | 一元运算符 | 由左至右 |
2 | ~ | 位逻辑运算符 | 由右至左 |
2 | ++、-- | 递增与递减运算符 | 由右至左 |
3 | *、/、% | 算术运算符 | 由左至右 |
4 | +、- | 算术运算符 | 由左至右 |
5 | <<、>> | 位左移、右移运算符 | 由左至右 |
6 | >、>=、<、<= | 关系运算符 | 由左至右 |
7 | ==、!= | 关系运算符 | 由左至右 |
8 | & | 位运算符、逻辑运算符 | 由左至右 |
9 | ^ | 位运算符、逻辑运算符 | 由左至右 |
10 | | | 位运算符、逻辑运算符 | 由左至右 |
11 | && | 逻辑运算符 | 由左至右 |
12 | || | 逻辑运算符 | 由左至右 |
13 | ?: | 条件运算符 | 由右至左 |
14 | =、+=、-=、*=、/=、%= | 赋值运算符、扩展运算符 | 由右至左 |
小建议 :
1.大家不需要去刻意的记这些优先级,表达式里面优先使用小括号来组织!!
2.逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)。如:
3.a||b&&c 的运算结果是:a||(b&&c),而不是(a||b)&&c
二、数据类型的转换
我们讲解了八种基本数据类型,除了 boolean 类型之外的七种类型是可以自动转化的。 甚至,我们也可以使用“强制类型转换”将数据类型变成我们所需要的。本节详细讲解关于 类型转换的细节。
1.自动类型转换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图1所示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
可以将整型常量直接赋值给 byte、 short、 char 等类型变量,而不需要进行强制类 型转换,只要不超出其表数范围即可。
代码如下(示例1):自动类型转换特例
short b = 12; //合法
short b = 1234567; //非法,1234567 超出了 short 的表数范围
2.强制类型转换
强制类型转换,又被称为造型(cast),用于强制的转换一个数值的类型。在有可能丢 失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
语法格式:(type)var
运算符“()”中的 type 表示将值 var 想要转换成的目标数据类型。
代码如下(示例2):强制类型转换
/**
* 测试强制类型转换
* @author smallwhite
* @createDate: 2022/5/22
*/
public class myCode {
public static void main(String[] args) {
double x = 3.94;
int nx = (int)x; //值为 3
char c = 'a';
int d = c+1;
System.out.println(nx);
System.out.println(d);
System.out.println((char)d);
System.out.println ("-------------------");
int z = 300;
byte bz = (byte)z;
System.out.println (bz);//值为 44
}
}
运行该程序,执行结果如图2所示。
当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成 为一个完全不同的值。
提示:不能在布尔类型和任何数值类型之间做强制类型转换
3.基本类型转化时常见错误和问题
操作比较大的数时,要留意是否溢出,尤其是整数操作时。
代码如下(示例3):类型转换常见问题一
/**
* 测试强制类型转换
* @author smallwhite
* @createDate: 2022/5/22
*/
public class myCode {
public static void main(String[] args) {
int money = 1000000000; //10亿
int years = 20; //返回的total是负数,超过了int的范围
int total = money*years;
System.out.println("total="+total);
//返回的total仍然是负数。默认是int,因此结果会转成int值,
// 再转成long。但是已经发生了数据丢失
long total1 = money*years;
System.out.println("total1="+total1);
//返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
long total2 = money*((long)years);
System.out.println("total2="+total2);
}
}
运行该程序,执行结果如图3所示。
L 和 l 的问题:
1. 不要命名名字为 l 的变量,字母 l 容易和数字 1 混淆。
2. long 类型使用大写 L,不要用小写 l。
代码如下(示例4):类型转换常见问题二
int l = 2; //分不清是L还是1,
long a = 23451l;//建议使用大写L
System.out.println(l+1);
三、简单的键盘输入和输出
为了我们能写出更加复杂的程序,可以让我们的程序和用户可以通过键盘交互,我们先学习一下简单的键盘输入和输出。
代码如下(示例4):使用 Scanner 获取键盘输入
/**
* 测试Scanner方法
* @author smallwhite
* @createDate: 2022/5/22
*/
import java.util.Scanner;
public class myCode {
public static void main(String[ ] args) {
Scanner scanner = new Scanner(System.in);
// 将输入的一行付给 string1
String string1 = scanner.nextLine();
// 将输入单词到第一个空白符为止的字符串付给 string2
String string2 = scanner.next();
// 将输入的数字赋值给变量
int a = scanner.nextInt();
System.out.println("-----录入的信息如下-------");
System.out.println(string1);
System.out.println(string2);
System.out.println(a);
}
}
运行该程序,执行结果如图4所示。
总结
以上就是今天要讲的内容,本文简单介绍了运算符的优先级问题,数据类型的转换问题,还有Scanner函数的简单使用方法,希望对大家有所帮助哦!大家接着加油啊!