int a = 30;
int b = 10;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
加减乘除和数学里面的没有区别,取模运算相当于数学中除法的余数
下面我们看一下字符串
String str = "ObiWan";
System.out.println(str);
字符串相加是什么效果?
我们可以看到他是拼接在一起了
如果字符串加数字会怎么样?
我们没有得到ObiWan30,而是得到了ObiWan1020
这是为什么?
因为:其他数据类型和字符串使用+拼接,结果就是一个字符串
那我们要是想要得到ObiWan30,怎么做呢?
两个解决办法,第一个办法是把数字加法放到前面,第二个办法是加括号
我们想要10+20在前面还是输出1020ObiWan,怎么做呢?
我们想要输出a=10,b=20,又怎么做呢?
第一个,我们可以给10+20的中间加上“”,中间加不加空格都可以,这样相当于数字加字符串加数字加字符串,而不是数字加数字加字符串
第二个也是同样的方法,把其中一个数字变成字符串,就可以了
我们再看一下java的转义字符
下面这些代码的输出是什么
String s1 = ""bit"";
String s2 = "\bit\";
String s3 = "\\bit\\"
答案是
| \ | 代表一个反斜字符 |
| " | 代表一个双引号字符 |
那么数字可不可以转换成字符串呢?
可以看到它输出了一个10
我们借用一个String.valueof()
这个方法里面可以看到八大类型都在里面
就变成了字符串
我们还可以字符串变整数
是用 Integer.valueOf
做几个简单的数学题
System.out.println(10%3);
System.out.println(-10%3);
System.out.println(10%-3);
System.out.println(-10%-3);
答案是多少呢?
因为java里面的,取余,求模,取模全是求余数
自增/自减运算符 ++ -- 下面这段代码结果是什么 int a = 10;
int b = a++;
int c = 10;
int d = ++c;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
- 如果单独使用,【前置++】和【后置++】没有任何区别
- 如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式 结束时给变量+1
- 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a < b);
System.out.println(a > b);
System.out.println(a <= b);
System.out.println(a >= b);
逻辑运算符
逻辑运算符主要有三个
:
&& || ! ,运算结果都是
boolean
类型。
语法规则:表达式
1 &&
表达式
2
,左右表达式必须是
boolean
类型的结果。
int a = 1;
int b = 2;
System.out.println(a==1 && b==2);
System.out.println(a==1 && b > 100);
System.out.println(a>100 && b==2);
System.out.println(a>100 && b>100);
上面代码结果是什么?
两个表达式都为真,结果才是真,只要有一个是假,结果就是假。
逻辑 || 语法规则:表达式 1 || 表达式 2 ,左右表达式必须是 boolean 类型的结果。 下面这段代码又是什么结果 int a = 1;
int b = 2;
System.out.println(a==1 || b==2);
System.out.println(a==1 || b > 100);
System.out.println(a>100 || b==2);
System.out.println(a>100 || b>100);
左右表达式至少有一个位真,则结果为真
逻辑非 !
语法规则: ! 表达式 ,真变假,假变真。 下面这段代码结果又是什么 int a = 1;
System.out.println(!(a==1));
System.out.println(!(a!=1));
短路求值 && 和 || 遵守短路求值的规则 代码结果是什么
System.out.println(10 > 20 && 10 / 0 == 0);
System.out.println(10 < 20 || 10 / 0 == 0);
我们都知道 , 计算 10 / 0 会导致程序抛出异常 . 但是上面的代码却能正常运行 , 说明 10 / 0 并没有真正被求值 . 注意 :
- 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
- 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
- & 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.
下面这段代码结果是什么?
System.out.println(10 > 20 & 10 / 0 == 0);
System.out.println(10 > 20 | 10 / 0 == 0);
位运算符
移位运算
移位运算符有三个
:
<< >> >>>
,都是二元运算符,且都是按照二进制比特位来运算的。
1.
左移
<<
:
最左侧位不要了, 最右侧补 0.
注意:
向左移位时,丢弃的是符号位,因此正数左移可能会编程负数
2. 右移 >> : 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>>: 最右侧位不要了, 最左侧补 0. 1111 1111 >>> 1 -> 0111 1111 注意 : 1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方. 2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方. 3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替. 4. 移动负数位或者移位位数过大都没有意义. 条件运算符:三目运算符
表达式1?表达式2:表达式3
表达式为布尔表达式
运算符的优先级 注意:运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可.


