运算符

算术运算符

+加 -减 *乘 /除 %取模 ++自增 --自减 +字符串拼接运算

注意:

1. 两个int类型运算完后之后,结果一定是int类型

2. byte和short类型在进行运算的时候,底层会自动提升为int类型,然后进行计算

3. 对于byte b = 3 + 4; JVM在编译的时候会进行优化,编译完成之后,实际上这句话就已经成了byte b = 7;  

% 取模--取余

103%3 = 1  2%5 = 2  4%2=0

-5%3=-2  -1% 3=-1

5%-3=2  1%-3=1

-5%-3=-2

对于负数的取余,先按照正数的取余运算,运算完成之后看%左边的数字的符号,如果左边的数是正数,结果就是正数,如果左边的数字是负数,结果是就是负数。

3.2%2=1.2  3%1.2=0.6  -3.5 % 1.7=-0.1

++ 自增

相当于在原来的基础上加了1 ->i = i + 1;

只有自增运算的时候,++在前在后结果一样。

++在前,这个变量是先自增,然后再参与其他的运算 int i = 5; int j = ++i;--> i = j = 6;

++在后,先进行其他运算,然后这个变量再自增  int i = 5; int j = i++; i=6;j = 5;

int i = 5;

int j = i++ + ++i; j=12

int j = ++i + i++;  j=12

byte类型的数据可以进行自增运算吗?

byte b = 3;

b++;---可以

在运算完成之后,Java在底层会对结果做一次强制类型的转换,原来是byte类型就再转换会byte类型

byte b = 127;

b++;

+ 字符串拼接运算

“a” + “b” ->“ab”

2 + “a” ->“2a”

 2 + 3 + “a” ->“5a”

2 + ‘a’ -> 99

“a” + 2 + 3 ->“a23”

“a” + true->“atrue”

赋值运算符

= += -= *= /= %= &= |= ^=

=进行赋值运算

int i = 5;

i += 2; -> i = i + 2;

byte b = 25;

b += 5;---> 可以

除了=以外的赋值运算符,在使用之前,这个变量必须有初始值。

比较/关系运算符

==等于  !=不等于 ><>= <= instanceof

3 != 4--> true

3 > 4-> false

instanceof 用来判断对象与类的关系的

逻辑运算符

&---与(And) |---或(Or) !---非(Not) ^---异或 &&---短路与 ||---短路或

true&true=true true&false=false false&true=false false&false=false

true|true=true true|false=true false|true=true false|false=false

!true=false !false=true

true^true=false true^false=false^true=true false^false=false

java 中逻辑运算符&与&&,|与||

&&短路与,运算规则和&完全一样,但是&&有短路特性,如果&&之前的运算结果确定为false,则后边的表达式就不再运算。


对于||而言,如果前边的表达式的结果为true,则后边的表达式就不再运算


一、&与&&的异同点。

相同点:二者都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则为false。

不同点:在使用&进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用&&进行运算时,当左边为false时,右边的表达式不会进行运算,因此&&被称作短路与。

二、|与||的异同点。

相同点:二者都表示或操作,当运算符两边的操作数任何一边的值为true时,其结果为true,当两边的值都为false时,其结果才为false。

不同点:同与操作类似,||表示短路或,当运算符左边的值为true时,右边的表达式不会进行运算。




位运算符

&与 |或 ^异或 <<左移 >>右移 >>>无符号右移 ~取反

注意:位运算是针对整数进行运算,位运算针对的是整数,运算的是数据的补码


数据在计算机中是以补码形式来存储的。最高位是一个符号位---如果是正数,最高位为0,如果是负数,最高位为1. 对于正数而言,原反补三码一致。负数的反码是在原码的基础上,最高位不变,其余位0->1,1->0,负数的补码是在反码的基础上+1

6- 00000000 00000000 00000000 00000110---原码/反码/补码
-6 - 10000000 00000000 00000000 00000110---原码
  11111111 11111111 11111111 11111001---反码
  11111111 11111111 11111111 11111010---补码
  11111111 11111111 11111111 11101101---补码
  11111111 11111111 11111111 11101100---反码
  10000000 00000000 00000000 00010011---原码--- -19

java字符串指定模式提取代码 java字符串取模运算_自增

java字符串指定模式提取代码 java字符串取模运算_运算_02


a ^ b ^ b = a;   b ^ b ^ a = a

交换两个数的值:

int i = 3, j = 5;

方式一:第三方变量

int k = i;

i = j;

j = k;

方式二:加减法

i = i + j;

j = i - j;

i = i - j;

方式三:异或

i = i ^ j;

j = i ^ j; -> j = i ^ j ^ j; -> j = i;

i = i ^ j; -> i = i ^ j ^ i; -> i = j;

i ^= j; j ^= i; i ^= j;

java字符串指定模式提取代码 java字符串取模运算_补码_03

三元运算符


逻辑/关系表达式? 表达式1 :表达式2;


执行顺序:如果逻辑/关系表达式结果为true的话,执行表达式1,;反之执行表达式2


表达式1和表达式2的运算结果要求类型相同或相容

double d = a > b ? a * 2 : b * 2.5;
a > b ? System.out.println(a):System.out.println(b); //这种方式不允许,因为没有运算结果

注意:三元运算符也是一个运算符,所以运算完成之后一定有运算结果

在在使用过程中,三元表达式形成嵌套的时候,尽量添加()来提高代码的可读性

int i = 3, j = 4;
System.out.println(i > j ? true : false);  //从语法上而言,没问题
// i > j ? true : false -> i < j     (直接判断true,false System.out.println(i > j);

从控制台获取数据:

import java.util.Scanner;
Scanner s = new Scanner(System.in);
double d = s.nextDouble();   // 获取小数
int i = s.nextInt();   // 获取整数
String str = s.nextLine();  // 获取一行

+ 字符串拼接运算

String s = “a”;

s = s + “b”; -> s = “ab”

可以利用+将两个字符串进行拼接,或者也可以利用+将任何数据与字符串进行拼接