java(3)------运算符常用大全

时间:2021-09-12 17:24:32

1.运算符的优先级

运算符的优先级,实际上是在一个计算式中,存在多个运算符计算,先算谁,后算谁的问题。在数学中,上小学时,

常常听到老师说:"先乘除,后加减",这是基本原则,但在复杂的运算中,我们还得注意括号等等。以下列出java运算符

优先级别。

java(3)------运算符常用大全

java(3)------运算符常用大全

2.赋值处理

赋值是用等号运算符(=)进行的。它的意思是“取得右边的值,把它复制到左边”。右边的值可以是任何常数、变量或者表达式,

只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一个物理性的空间来保存右边的值。

举个例子来说,可将一个常数赋给一个变量(A=4;),但不可将任何东西赋给一个常数(比如不能)

3.算术运算符

Java的基本算术运算符与其他大多数程序设计语言是相同的。整数除法会直接砍掉小数,而不是进位。Java也用一种简写形式进行运算,

并同时进行赋值操作。这是由等号前的一个运算符标记的,而且对于语言中的所有运算符都是固定的。例如,为了将4加到变量x,

并将结果赋给x,可用:x+=4。

4.自动递增,递减

递减运算符是“--”,意为“减少一个单位”;递增运算符是“++”,意为“增加一个单位”。举个例子来说,假设A是一个int(整数)值,

则表达式++A就等价于(A= A + 1)。递增和递减运算符结果生成的是变量的值。对每种类型的运算符,都有两个版本可供选用;

通常将其称为“前缀版”和“后缀版”。“前递增”表示++运算符位于变量或表达式的前面;而“后递增”表示++运算符位于变量或表达式的后面。

类似地,“前递减”意味着--运算符位于变量或表达式的前面;而“后递减”意味着--运算符位于变量或表达式的后面。

对于前递增和前递减(如++A或--A),会先执行运算,再生成值。而对于后递增和后递减(如A++或A--)会先生成值,再执行运算.

eg:

package com.lanhuigu.base;
/**
* 递增(++)和递减(--)
*/
public class AutoTest {
public static void main(String[] args) {
//1.递增
//1.1 先++(双加号在前)
int preAdd = 1;
//执行逻辑:preAdd先加1变成2,得到的结果preAdd为2赋值给表达式++preAdd,即preAddNum为2
int preAddNum = ++preAdd;
System.out.println("preAdd:"+preAdd);
System.out.println("preAddNum:"+preAddNum);
//1.2 后++(双加号在后)
int aftAdd = 1;
//执行逻辑:先把aftAdd的值1赋值给表达式aftAdd++,即aftAddNum为1,再把aftAdd加1变成2
int aftAddNum = aftAdd++;
System.out.println("aftAdd:"+preAdd);
System.out.println("aftAddNum:"+aftAddNum);
//1.递减
//1.1 先--(双减号在前)
int preSubtract = 1;
//执行逻辑:preSubtract先减1变成0,得到的结果preSubtract为0赋值给表达式--preSubtract,即preSubtractNum为0
int preSubtractNum = --preSubtract;
System.out.println("preSubtract:"+preSubtract);
System.out.println("preSubtractNum:"+preSubtractNum);
//1.2 后--(双减号在后)
int aftSubtract = 1;
//执行逻辑:先把aftSubtract的值1赋值给表达式aftSubtract--,即aftSubtractNum为1,再把aftSubtract减1变成0
int aftSubtractNum = aftSubtract--;
System.out.println("aftSubtract:"+preSubtract);
System.out.println("aftSubtractNum:"+aftSubtractNum);
}
}

控制台输出结果:

preAdd:2
preAddNum:2
aftAdd:2
aftAddNum:1
preSubtract:0
preSubtractNum:0
aftSubtract:0
aftSubtractNum:1

5.关系运算符

关系运算符生成的是一个“布尔”(Boolean)结果。它们评价的是运算对象值之间的关系。若关系是真实的,

关系表达式会生成true(真);若关系不真实,则生成false(假)。关系运算符包括小于(<)、大于(>)、

小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。等于和不等于适用于所有内建的数据类型,

但其他比较不适用于boolean类型。

注意==和equals()的区别:

package com.lanhuigu.base;
/**
* ==和equals()的区别:
* (1)==相同对象的相同内容时为true,否则为false
* (2)相同或不同对象的相同内容为true,否则为false
*/
public class EqualsTest {
public static void main(String[] args) {
//创建两个不同对象t1、t2,但是内容相同均为1
Integer t1 = new Integer(1);
Integer t2 = new Integer(1);
//Test
System.out.println(t1 == t2);// false
System.out.println(t1.equals(t2));// true
}
}

6.逻辑运算符

逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成一个布尔值(true或false)——以自变量的逻辑关系为基础。

&&: 全真才真,一假必假

||: 一真即真,全假才假

!: 真假相对

7.按位运算符

移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)

能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)

则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;

若值为负,则在高位插入。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。

这一运算符是C或C++没有的。若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。

只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,

最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,

也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(ava 1.0和ava 1.1特别突出)。

它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。

8.三元(三目)运算符

布尔表达式?值0:值1;

如果布尔表达式为true,整个表达式的值为值0,否则,整个表达式的值为值1;

package com.lanhuigu.base;
/**
* 布尔表达式?值0:值1;
*/
public class ThreePhase {
public static void main(String[] args) {
String testStr = 2>1?"值0":"值1";
System.out.println(testStr);
}
}

9.字符串运算+号

连接不同的字符串。

package com.lanhuigu.base;
/**
* +连接不同的字符串
*/
public class MyPlusSign {
public static void main(String[] args) {
//1.从左边开始算起,1+1为2,当遇到字符串时,自动转换成字符串连接
System.out.println(1+1+"this is my test"+1+1+"!");
//2.从左边开始,右边遇到左边的字符串自动转换成字符串连接
System.out.println("this is my test"+1+1+1+"!");
}
}
控制台输出:

2this is my test11!
this is my test111!