Java中常用的运算符分为:
1.算术运算符中着重说下"++"和"--":
"++"和"--"在运算中分为前++(--)和后++(--);
前++在运算中是本身先运算后在参与运算的,而后++不同,是本身在表达式中不参与运算的.
前--在运算中是本身先运算后在参与运算的,而后--不同,是本身在表达式中不参与运算的.
2.逻辑运算符中着重说下"|","||"和"&&","&"在执行上的区别:
逻辑运算符是对boolean类型的值进行运算的.
"|":或,"||":短路或;遇true则true.
"&":与,"&&":短路与;遇false则false.
在日常开发中短路与和短路或是比较常用的,在运算中,"|",前后关系表达式都得进行运算判断,"||",而"||"的前面的关系表达式如果为true,后面就不用进行运算了.
3.赋值运算符中着重说下"=","+=",在表达式中赋值和默认强转的区别:
byte b = 3;
b+=1;这行代码直接进行了类型转换
b= b + 1;而它必须进行向下转型b = b + (byte)1;
4.位运算符:
是对(数值)二进制进行运算的
">>":位右移(左补,最高位补为1,就补1,最高位为0,就补0)
"<<":位左移(右补0)
">>>":无符号右移(左补0)
"^":位异或(相同则0,不同则1)
"~":按位取反
"|":位与(遇0则0)
"&":位或(遇1则1)
5.三元表达式:
(关系表达式)?true:false;
6.面试题:
public class OperatorDemo {
/**
* 面试题1:交换变量
* int x = 10;
int y = 20;
*/
@Test
public void demo_01() {
int x = 10;
int y = 20;
int n;
n = x;
x = y;
y = n;
System.out.println(x);
System.out.println(y);
}
@Test
public void demo_02() {
int x = 10;
int y = 20;
int n;
n = x+y;
x = n-x;
y = n-y;
System.out.println(x);
System.out.println(y);
}
@Test
public void demo_03() {
int x = 10;
int y = 20;
x=(x+y)-(y=x);
System.out.println(x);
System.out.println(y);
}
@Test
public void demo_04() {
int x = 10;
int y = 20;
x = x^y;
y = x^y;
x = x^y;
System.out.println(x);
System.out.println(y);
}
/**
* 面试题2:
* 如何最有效率的算出数字8
*/
@Test
public void demo_05() {
System.out.println(2<<2);
}
@Test
public void demo_06() {
int a = 3;
int b = 4;
/**
* 位运算符 需要把数值转化成二进制进行运算
* 3
* 00000000 00000000 00000000 00000011
* 4
* 00000000 00000000 00000000 00000100
*/
System.out.println(a&b);
/** 遇0则0
* 00000000 00000000 00000000 00000000
*
* 0
*/
System.out.println(a|b);
/** 遇1则1
* 00000000 00000000 00000000 00000111
*
* 7
*/
System.out.println(a^b);
/** 同0则1 特点:一个数据被另一个数据位异或两次 等于 它本身
* 00000000 00000000 00000000 00000111
*
* 7
*/
System.out.println(~a);
/** 按位取反
* 00000000 00000000 00000000 00000011
*
* 11111111 11111111 11111111 11111100
* 11111111 11111111 11111111 11111011
* 10000000 00000000 00000000 00000100
* -4
*/
System.out.println(a<<2);
/** 左移 扩大2^2
* 3
* 00000000 00000000 00000000 00000011
* (00)000000 00000000 00000000 0000001100
*
* 12
*/
System.out.println(a>>2);
/** 右移 左边符号位为1,就补1,是0补0;缩小2^2
* 3
* 00000000 00000000 00000000 00000011
* 0000000000 00000000 00000000 000000(11)
* 0
*/
System.out.println(a>>>2);
/** 无符号右移 左边永远补0
* 3
* 00000000 00000000 00000000 00000011
* 0000000000 00000000 00000000 000000(11)
* 0
*/
}
}
@Test
public void demo_01() {
/**
* 使用三元运算符完成如下练习
比较两个数是否相等
获取两个数中最大值
获取三个数中最大值
*/
int a =10;
int b =20;
int c =30;
//比较两个数是否相等
System.out.println((a==b)?true:false);
//获取两个数中最大值
System.out.println((a>b)?a:b);
//获取三个数中最大值
int temp = a>b?a:b;
int max = temp>c?temp:c;
System.out.println(max);
int max2 = (a>b)?((a>c)?a:c):((b>c)?b:c);
System.out.println(max2);
}
@Test
public void demo_02() {
int x = 1,y = 1;
if(x++==2 & ++y==2)
{
x =7;
}
System.out.println("x="+x+",y="+y);
//x = 2 y = 2
}
@Test
public void demo_03() {
int x = 1,y = 1;
if(x++==2 && ++y==2)
{
x =7;
}
System.out.println("x="+x+",y="+y);
//x = 2 y = 1
}
@Test
public void demo_04() {
int x = 1,y = 1;
if(x++==1 | ++y==1)
{
x =7;
}
System.out.println("x="+x+",y="+y);
//x = 7 y = 2
}
@Test
public void demo_05() {
int x = 1,y = 1;
if(x++==1 || ++y==1)
{
x =7;
}
System.out.println("x="+x+",y="+y);
// x = 7 y =1 ;
}
@Test
public void demo_06() {
boolean b = true;
if(b==false)
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
//b
}