上篇说到 Java 中的变量与常量,接下来就是简单的计算了,首先需要了解一下 Java 中的运算符.
六,运算符
1. 赋值运算符
赋值运算符即 "=",是一个二元运算符(即对两个操作数进行处理),其功能是将右方操作数所含的值赋值给左方的操作符.其中左方必须是一个变量,而右边所赋的值可以使任何数值或表达式,例子如下:
int a = 10; // 将10赋给a
int b = 5; // 将5赋给b
int c = a+b; // 将变量a和b进行运算后的结果赋给c
也可先定义变量再进行赋值运算,如:
int a, b, c; // 声明int型变量a,b,c
a = 10; // 将10赋值给变量a
c = b = a + 5; // 将a+5赋值给变量b,c
在 Java 中可以把赋值运算连在一起使用,比如上方 b,c 的运算结果都为 15.
2. 算数运算符
Java 中的算数运算符主要有 +,-,*,/ 和 %,分别为加,减,乘,除和求余,都是二元运算符.注意除法运算时,0 不能作为除数.
public class Arith {
public static void main(String[] args) {
float num1 = 52.56f; // 声明float型变量并赋值
int num2 = 512; // 声明int型变量并赋值
System.out.println("num1 + num2 = " + num1 + num2); // 将变量相加并输出
System.out.println("num2 - num1 = " + (num2 - num1)); // 将变量相减并输出
System.out.println("num1 * num2 = " + num1 * num2); // 将变量相乘并输出
System.out.println("num1 / num2 = " + num1 / num2); // 将变量相除并输出
}
}
运行结果如下:
3. 自增和自减运算符
自增,自减运算符是单目运算符(只有一个操作数),可以放在操作数之前,也可以放在操作数之后.操作数必须是一个整型或浮点型变量.自增自减的作用是将变量的值加一或减一,放在操作数前后的作用不同,考试中最常出现的考题之一,需加以区分.
若自增(自减)运算符在操作数之前,如 ++a(--a)表示先使 a 的值加一(减一),再使用变量;若自增(自减)运算符在操作数之后,如 --a(--a)表示先使用变量 a,再对其进行加一(减一)操作,下面看一个例子:
public class Example {
public static void main(String[] args) {
int a; // 声明变量a
a = 4; // 赋值为4
System.out.println("++a后的值为:" + ++a); // 输出++a的值
a = 4; // 同样赋值为4(重新赋值,放止a的值已经发生改变)
System.out.println("a++后的值为:" + a++); // 输出a++的值
}
}
不妨先猜测一下结果是什么,运行结果如下:
为什么会出现两个不同的答案呢?a 的值为 4,++a 相当于先对 a 进行自增再输出,也就是执行输出时,a 的值已经变为 5 了;而 a++ 相当于先输出 a 的值再自增,也就是先输出 a 的值为 4,然后再对 a 进行自增,此时 a 为 5,但 4 已经输出了,所以会出现这两个结果.
4. 比较运算符
比较运算符属于二元运算符,用于变量与变量之间,变量与常量之间及其它类型的信息之间的比较,运算结果是 boolean 型,当运算符对应关系成立时,运算结果为 true,否则结果为 false.
常见比较运算符有 >(比较左是否大于右),<(比较左是否小于右),>=(比较左是否大于等于右),<=(比较左是否小于等于右),==(比较左是否等于右),!=(比较左是否不等于右).这里要特别注意,"="是赋值运算符,"==" 才是比较运算符.
public class Compare {
public static void main(String[] args) {
int num1 = 4;
int num2 = 5;
System.out.println("4<5: " + (num1 < num2)); // 判断4小于5是否成立
System.out.println("4>5: " + (num1 > num2)); // 判断4大于5是否成立
System.out.println("4==5: " + (num1 == num2)); // 判断4等于5是否成立
System.out.println("4!=5: " + (num1 != num2)); // 判断4不等于5是否成立
System.out.println("4>=5: " + (num1 >= num2)); // 判断4大于等于5是否成立
System.out.println("4<=5: " + (num1 <= num2)); // 判断4小于等于5是否成立
}
}
上述程序的运行结果如下:
5. 逻辑运算符
逻辑运算符包括 &&(&)(逻辑与),||(|)(逻辑或)和!(逻辑非),返回值为布尔类型,操作元也必须是布尔类型数据.其中除了 "!" 是一元运算符外,其余的都是二元运算符.逻辑与是左右两个表达式都为 true,逻辑结果才为 true;逻辑或是左右两个表达式有一个或两个表达式为 true 时,逻辑结果才为 true.
这里就有个小知识点了,&&(||)和 &(|)有什么区别呢?
以 "&&" 和 "&" 为例,这两个符号都是逻辑与,当左右两个表达式都为 true 时,逻辑结果才为 true.使用 "&" 时,左右两边都会判断;而使用 "&&" 时,如果 "&&" 左边的表达式结果为 false,那么计算机就不会再判断右边的结果了,直接返回逻辑结果为 false,这就是它们的区别."||" 则是左边判断为 true 时,就不会再判断右边,而 "|" 两边都会判断.使用 "&&" 和 "||" 可以节省计算机判断的次数,提高效率,通常被称为 "短路",而 "&" 和 "|" 被称为 "非短路".
6. 位运算符
位运算符用于处理整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制形式表示(这里二进制的表示不做过多说明,相信学计算机的朋友们都非常了解二进制存储及数据表示).主要有~(按位取反),&(按位与),|(按位或),^(安慰异或),<<(左移),>>(右移),>>>(无符号右移).
至于运算方法这里就不多赘述了,Java 语言可以利用这几个位运算符帮我们进行复杂的二进制运算,得到我们想要的结果,如 48<<1 就是将 48 的二进制数向左移 1 位,结果为 96.移位可实现整数除以或乘以 2 的 n 次方的效果,例如 y<<2 与 y*4 的结果相同,4 就是 2 的二次方, y>>1 与 y/2 的结果相同,2 为 2 的一次方.所以总结起来就是--左乘右除.
7. 三元运算符
三元运算符是 Java 中唯一一个三目运算符,操作数有三个,如 boolean b = 50 <30 ? true : false; ,解释一下这句代码,首先定义一个布尔型变量 b,= 右边是一个三元运算符,先判断 50 是否小于 30,如果成立,则结果为":"左边的值(true),如果不成立,结果为":" 右边的值(false),然后将得出的值赋给 = 左边的 b.再比如下面这个例子:
int i = 21;
int j = 47;
int z = i < j ? 100 : 200;
这里首先判断 i
8. 运算符优先级
Java 中表达式就是使用运算符连接起来的符合 Java 规则的式子,运算符的优先级决定了表达式中运算执行的先后顺序.下面是一张运算符优先级的表:
优先级 | 运算符 |
1 | ( ) |
2 | +、- |
3 | ++、--、! |
4 | *、/、% |
5 | +、- |
6 | >>、>>>、<< |
7 | <、>、>=、<= |
8 | ==、!= |
9 | & |
10 | ^ |
11 | | |
12 | && |
13 | || |
14 | ? : |
15 | = |
如果两个运算符有相同的优先级,那么左边的表达式要比右边的先处理.
七,类型转换
1. 自动类型转换
Java 中的 8 中基本类型可以混合使用,那必然会出现一个类型转换的问题,不同类型的数据在运算过程中首先会自动转换为同一类型再进行运算.自动类型转换遵循低级到高级转换的规则(占用空间越小级别越低).
例如:
float num1 = 45f;
int num2 = 120;
System.out.println(num1 + num2);
这里系统首先将 int 型变量转换成 float 型变量之后再相加,所以输出为 float 型,结果是 165.0.隐式转换规则见下表:
操作数 1 的数据类型 | 操作数 2 的数据类型 | 转换后的数据类型 |
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
2. 强制类型转换
当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换运算(又称强制类型转换),如把 double,float 型转换成 int,long 型如下:
int a = (int)42.56; // 此时a输出为42
long b = (long)467.5f // 此时b输出为467
但要注意的是,不可超出变量的取值范围,否则会数据溢出,如下方代码,由于 byte 型变量最大值为 127,而 427 已经超出其取值范围,因此会发生数据溢出,造成了数据的丢失.boolean 型不能转换.
short s = 427;
byte b = (byte) s;
以上就是 Java 语言基础的所有内容,下一篇将介绍 Java 中的流程控制.
来源: https://www.cnblogs.com/adamjwh/p/8324459.html