day02(运算符)

1.算术运算符

(1)

System.out.println(1+2+3+"hello"+1+2+3);  //输出6hello123,非6hello6或123hello123

原因:*每次运算时都是一次从左到右依次取两个数据运算;

   *任何类型的数据与字符串连接,结果是字符串类型的数据,即当运算到6hello+1+2+3时,"6hello"为字符串类型。

(2)

System.out.println(10%3);    //1
System.out.println(10%-3);   //1
System.out.println(-10%3);   //-1
System.out.println(-10%-3);  //-1

原因:java取模运算中,结果的正负号取决于被除数。

(3)自增自减

int a,b;

前自增:a = 2;  b=++a;  //a=3,b=3  (先自增,再使用)

后自增:a = 2;  b=a++;  //a=3,b=2  (先使用,再自增)不完全正确,便于理解

自减同理。

int i = 0;
i = i++;
System.out.println('i='+i);    //输出i=0

后自增咋JVM中的运行原理:因为后自增要使用到没有+1之前的值,那么jvm会先声明一个变量用于保存没有+1之前的值

上面代码可分为三步:

1*  int temp = i;  //声明一个临时变量用于记录i没有加1之前的值

2*  自增 i = i + 1;  i = 1;

3*  return temp;  //将temp作为表达式(i++)的结果  

2.赋值运算符

byte b1 = 1;
byte b2 = 2;
//b2 = b1 + b2;    //报错,需要强制类型转换
b2 += b1;    //对,因为使用'+='符号在编译时,java编译器会自动进行强制类型转换

3.比较运算符

(1)==在比较两个引用数据类型变量时,比较的是两个变量的内存地址是否相同。

(2)使用比较运算符的时候,要求两种数据类型必须一致。 byte、short、char 会自动提升至int;

当两个不同数据类型的数据不兼容时,会报错(例如boolean与int)。

(3)Instanceof  检查是否是类的对象 

例:"hello"instanceof String  //true

4.逻辑运算符

(1)^  异或

两边相同结果是false;   两边不同结果是true。

(2)&&  (短路与)

只有两边全为真的时候,结果才为真(同&),

当左边为假的时候就没有必要在进行判断,所以&& 效率稍微高了一点。

(3)|| (短路或)

只要一边为真的时候,结果就为真(同|),

当左边为真的时候就没有必要在进行判断,所以 || 比 | 效率稍微高了一点。

5.位运算符(&、|、^、~)直接操作二进制位

(1)

System.out.println(6&3);    //2

  0110  //6

&  0011  //3  

.......................................

  0010  //2

(2)~:取反,将1变成0,或将0变成1

(3)^:异或

规律:如果操作数A连续异或同一个数据两次,结果还是操作数A

应用:对数据加密

(4)可能会出现的笔试题目

*交换两个变量的值

方法一:(异或法)

int a = 3;
int b = 5;
a = a^b;    //a = 3^5;
b = a^b;    //b = (3^5)^5 = 3;
a = a^b;    //a = (3^5)^3 = 5;
System.out.println("a="+a+"b="+b); 

方法二:(相加法)

int a = 3;
int b = 5;
a = a+b;   // a = 3+5= 8;
b = a-b;    // b = 8-5 = 3;
a = a-b;    // a = 8-3 = 5;
System.out.println("a="+a+"b="+b);

*取出一个二进制数据的指定位数(取低四位)

用&来解决,第四位为1,其余为0

6.移位运算符

(1)

<< 左移:左移n位,结果就是操作数乘以2的n次方;

>> 右移:右移n位,结果就是操作数除以2的n次方,

注意:左边补充位是1还是0,正数补充0,负数补充1;

>>> 无符号右移:左边补充位都是0;

(2)笔试题目:

用最高效率算出2乘以8的结果:2<<3 = 2*(2^3) = 16;

7.三元运算符

(1)格式:布尔表达式?值1:值2;

如果布尔表达式为true,运算后的结果是值1

如果布尔表达式为false,运算后的结果是值2

(2)注意:

使用三元运算符的时候,一定要使用该表达式返回的结果,或者定义一个变量接受该表达式返回的结果;

int age = 14;
String result = age>=18?"成年人":"未成年人";
System.out.println(result);
原文地址:https://www.cnblogs.com/stellar/p/5135992.html