Java中操作符
- 一、运算符的种类
- 二、运算符的使用
- 1、赋值(=)
- 2、算术运算符
- 3、关系预算符
- 4、逻辑运算符
- 5 、按位操作符
- 6、移位操作符
- 7、三元操作符
- 8、字符串操作符+和+=
- 9、类型转换操作符
- 10 、Java没有sizeof()操作符
一、运算符的种类
- 算术运算符:+,-,*,/,%,++,–
- 赋值运算符:=
- 位移运算符:<<,>>,>>>,<<=,>>=,>>>=
- 按位运算符:&,|,~,^
- 关系运算符:>,>=,<,<=,==
- 逻辑运算符:&&,||,!
- 三目运算符:? :
- 字符串操作运算符:+、+=
二、运算符的使用
1、赋值(=)
赋值运算符是“=”,意思是取右边的值复制或传递给左边的值。右边的值可以是任何常数、变量、表达式(只要能生成一个值)。但足左边的值必须是一个明确的、已命名的的变量。但是不能把任何东西赋值给一个常数。
代码如下(示例):
public class Tank {
float a = 0;
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.a = 3;
t2.a = 2;
t1.a = t2.a;
System.out.println("t1.a:"+t1.a);
System.out.println("t2.a:"+t2.a);
}
}
2、算术运算符
- Java算术运算符包括加号(+)、减号(-)、除号(/)、乘号(*)、取模(%)。整数除法会直接去掉结果的小数位,而不是四舍五入地圆整结果。
- 自增(++)和自减(–):增加一个单位或减少一个单位。当前缀递增或递减时,先运算后赋值;当后缀递增或递减时,先复制后运算。
代码如下(示例):
```java
public class Tank {
public static void main(String[] args) {
int a = 1,b= 1;
System.out.println("a+b:"+(a+b));
System.out.println("a-b:"+(a-b));
System.out.println("a*b:"+(a*b));
System.out.println("a/b:"+(a/b));
System.out.println("a++:"+(a++));
System.out.println("++a:"+(++a));
System.out.println("b--:"+(b--));
System.out.println("--b:"+(--b));
System.out.println("a:"+a);
System.out.println("b"+b);
// a+b:2
// a-b:0
// a*b:1
// a/b:1
// a++:1
// ++a:3
// b--:1
// --b:-1
// a:3
// b-1
}
}
3、关系预算符
关系运算符生成一个Boolean值的结果,比较的是操作数之间的关系。如果为真,则是true;若为假,则为false;其中等于和不等于适用于所有的基本数据类型,而其他比较符不适用于Boolean类型。因为Boolean值本身就是true和false,大小对于它没有实际意义。
- ==和!=比较的是对象的引用。因为创建对象的时,会在堆栈中分配一个空间。
- 若是要比较两个对象的内容,则用equals()方法。
public class Tank {
public static void main(String[] args) {
Integer a = new Integer(47);
Integer b = new Integer(47);
System.out.println(a==b);
System.out.println(a.equals(b));
// false
// true
}
}
4、逻辑运算符
在逻辑预算符中,“与(&&)”、“或(||)”,“非(!)”操作是适应与布尔值。不可将一个非布尔值当做布尔值在逻辑表达式中使用。
若是在使用String值的地方使用布尔值,布尔值会自动转换成适当的文本形式。
短路现象:
&&(与)也叫做短路与,因为只要当前项为假,它就不往后判断了,直接认为表达式为假
||(或)也叫做短路或,因为只要当前项为真,它也不往后判断了,直接认为表达式为真
public class Tank {
static boolean test1(int val) {
System.out.println("test1(" + val + ")");
System.out.println("result:" + (val < 1));
return val < 1;
}
static boolean test2(int val) {
System.out.println("test2(" + val + ")");
System.out.println("result:" + (val < 2));
return val < 2;
}
static boolean test3(int val) {
System.out.println("test3(" + val + ")");
System.out.println("result:" + (val < 3));
return val < 3;
}
public static void main(String[] args) {
System.out.println("----------&&的短路测试----------");
boolean a = test1(0) && test2(2) &&test3(1);
System.out.println("a:" + a);
System.out.println("----------||的短路测试----------");
boolean b = test1(1) || test2(1) || test3(4);
System.out.println("b:" + b);
}
// ----------&&的短路测试----------
// test1(0)
// result:true
// test2(2)
// result:false
// a:false
// ----------||的短路测试----------
// test1(1)
// result:false
// test2(1)
// result:true
// b:true
}
5 、按位操作符
按位操作符用来操作整数基本数据类型中的单个“比特(bit)”,即二进制位。对两个参数中对应的为执行布尔代数运算,并最终生成一个结果。
- 若输入的两个数都是1,测试按位“与(&)”生成一个输出位1,否则生成一个输出位0;
- 若是输入位只有一个1,则是按位“或(|)”生成一个输出位1,只有两个输入位都是0,才会生成一个输出位0;
- 若是输入位的某一个是1,则是按位“异或(^)”生成一个输出位1。
- 按位“非(~)”,也称为取反操作符。其生成与输入位相反的值——若输入0,生成1;若输入1,则生成0;
6、移位操作符
.移位操作位用来处理整数的基本数据类型,运算对象也是二进制的“位”。
- 左位移操作符(<<):按照操作符右侧指定的位数将操作符左边的的操作数向左移动(在低位补0)。
- 右位移操作符(>>):按照操作符右侧指定的位数将操作符左边的的操作数向右移动。
- “有符号”右位移操作符使用“符号扩展”:若符号为正,则在高位插入0;弱符号为负,则在高位插入1。“无符号”右位移操作符(>>>),使用“零扩展”。即无论正负,都在高位插入0;
- 若对char、byte、short类型的数值进行位移处理时,在位移之前,会被转化成int类型,并且得到结果也是int类型。
- “位移”可与“等号”(<<=、>>=、>>>=)组合使用,则表示操作符左边的值会移动由右边的的值指定的位数。再将得到的结果赋值给左边的变量。
7、三元操作符
三元操作符也称条件操作符。如果布尔表达式为true,则取value1。若表达式为false,则取value2;
表达式为:
Boolean-exp ?value1 :value2;
8、字符串操作符+和+=
该操作符的作用是:连接不同的字符串。若表达式以一个字符串开头,那么后续所有的操作数都必须是字符串型的。
9、类型转换操作符
Java会将一种数据类型自动转换成另一种数据类型。
- 其中布尔类型不允许进行任何类型的转换处理,其它基本类型都可转换成别的基本数据类型。
- 将float和double转型为整型值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
10 、Java没有sizeof()操作符
在C和C++中,sizeof()操作符可以告诉你为数据项分配的字节数。使用这个操作符的最大原因是为了进行一些与存储空间有关的运算,使程序可以在不同平台上“移植”。
而Java不需要sizeof()操作符来满足这方面的需要,因为所有数据类型在所有机器中的大小是相同的。我们不必考虑移植问题——它已经被设计在语言中了。