java入门(二)-运算符,循环语句

一,运算符

(一)算术运算符: +、-、*、/、%、++、–。
(二)关系运算符: ==、 !=、 < 、>、 <=、 >=。
(三)逻辑运算符: &&、&、||、|、!、^
(四)位运算符: &,|,~,^,<<,>>,>>>
(五)条件运算符: 也叫三目运算符,只有一个:表达式1 ? 表达式2 : 表达式3

运算符优先级

Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。

级数运算符结合优先级顺序
1()、[]从左向右
2!、+、-、~、++、–从右向左
3*、/、%从左向右
4+、-从左向右
5«、»、>>>从左向右
6<、<=、>、>=、instanceof从左向右
7==、!=从左向右
8&从左向右
9^从左向右
10不短路或从左向右
11&&从左向右
12从左向右
13?:从右向左
14=、+=、-=、*=、/=、&=、\=、^=、~=、«=、»=、>>>=从右向左

注:实际开发中,尽量使用()来控制表达式的执行顺序,代码可读性比运行效率往往更重要!

> 算术运算符

  • +:加法运算符

    一种是跟数学中方法一样,另外,+还可以作为字符串的连接运算符。

  • -:减法运算符,*:乘法运算符
    跟数学中方法一样

  • /:除法运算符
    跟数学中方法一样
    注:如果除法运算符的两个操作数都是整数类型,则计算结果为整数,除数不可以为0,否则会引发异常;如果除法运算符的两个操作数中至少一个是浮点数,则计算结果也是浮点数,此时除数可以为0或0.0,得到的结果是正无穷大或负无穷大。

  • %:求余运算符(取模运算符)

10%3=3
不仅仅可以对 int 求模,也能对 double 来求模。
11.5%2.0=5.75
  • ++:自增运算符
    需要注意的是前置(后置)自增/自减
    前置自增/自减,如下
int a = 10;
int b = ++a;
输出:a=11  b=11

后置自增/自减,如下

int a = 10;
int b = a++;	
输出: a=11  b=10	
  • 小结:

如果不取自增运算的表达式的返回值,则前置自增和后置自增没有区别。
如果取表达式的返回值,则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值。

> 关系运算符:

  • 关系运算符主要有六个==、 !=、 < 、>、 <=、 >=。
    注意,Java中,关系运算符的表达式返回值都是boolean类型( true 或者 false )。这是与C语言有所不同的。
    例如:
public static Test{
	int a = 10;
	int b = 20;
	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类型

  • &&:规则:两个操作数都为 true,结果为 true,否则结果为 false 。**
  • &:不短路与,作用与&&相同,但不会短路。**
  • ||:或,两个操作数只要有一个为true,就返回true,两个操作数都为false才返回false。**
  • |:不短路或,作用与||相同,但不会短路。**
  • !:非,或取反,如果操作数是true,则返回false。如果是false,则返回true。**
  • ^:异或,当两个操作数不同时才返回true,相同返回false。**

& 和 | (不推荐使用)
& 和 | 如果操作数为 boolean 的时候,也表示逻辑运算,但是和 && 以及 || 相比,它们不支持短路求值。

下面代码示范了逻辑运算符短路与不短路的区别(以|||的区别为例):
int a = 3;

int b = 9;

if(a>2 | b++ >9){
 //输出10,说明b++ >9得到了计算

 System.out.println(b); 

}

if(a>2 || b++ >9){
 //输出9,说明b++ >9没有得到了计算

 System.out.println(b); 

}

&&&的区别与此类似。

> 位运算符:

  • &:按位与。如果两个二进制位都是 1,则结果为 1,否则结果为 0 。**

  • |:按位或。如果两个二进制位都是 0,则结果为 0,否则结果为 1 ,只要有一位为1就返回1。**
    在这里插入图片描述
    结果如下:
    在这里插入图片描述
    其原因如下图所示:
    在这里插入图片描述

  • ~:按位非。单目运算符,将操作数的每一位(包括符号位)全部取反。
    如果该位为 0 则转为 1,如果该位为 1 则转为 0 。

在这里插入图片描述
运行结果如下
在这里插入图片描述
分析如下图
在这里插入图片描述
注意:

0x 前缀的数字为 十六进制 数字。十六进制可以看成是二进制的简化表示方式。一个十六进制数字对应 4 个二进制位。
0xf 表示 10 进制的 15,也就是二进制的 1111。
printf 能够格式化输出内容,%x 表示按照十六进制输出。
\n 表示换行符。

  • ^:按位异或。如果两个数字的二进制位相同,则结果为 0,相异则结果为 1。
    在这里插入图片描述
    运行结果如下
    在这里插入图片描述

  • <<:左移运算符。最左侧位不要了,最右侧补 0 。**

  • .>>右移运算符。最右侧位不要了,最左侧补符号位(正数补0,负数补1)。**

  • . >>>:无符号右移运算符。最右侧位不要了, 最左侧补 0 。**
    在这里插入图片描述
    运行结果如下
    在这里插入图片描述
    原因如下
    在这里插入图片描述

注意:

左移 1 位,相当于原数字×2。左移 N 位,相当于原数字×2 的N次方。
右移 1 位,相当于原数字÷2。右移 N 位,相当于原数字÷2 的N次方。
由于计算机计算移位效率高于计算乘除,当某个代码正好乘除 2 的N次方的时候可以用移位运算代替。
移动负数位或者移位位数过大都没有意义。


 代码示例如下:

System.out.println(5&9); //输出1

System.out.println(5|9); //输出13

System.out.println(~-5); //输出4

System.out.println(5^9); //输出12

System.out.println(5<<2); //输出20

System.out.println(-5<<2); //输出-20

System.out.println(-5>>2); //输出-2

//下面输出1073741822

System.out.println(-5>>>2);

> 条件运算符

当 表达式1 的值为 true 时,整个表达式的值为 表达式2 的值;当 表达式1 的值为 false 时,整个表达式的值为 表达式3 的值。
例如,两个数中的较大的数。

在这里插入图片描述
运行结果如下
在这里插入图片描述
这样,我们很轻松地就求取了两数中的较大值。

小结 % 操作再 Java 中也能针对 double 来计算。 需要区分清楚前置自增和后置自增之间的区别。 由于 Java
是强类型语言,因此对于类型检查较严格,因此像 && 之类的运算操作数必须是 boolean类型。 要区分清楚 & 和 |
什么时候是表示按位运算,什么时候表示逻辑运算。 整体来看,Java 的运算符的基本规则和 C 语言基本一致。

二:循环语句

- while循环

循环语句:可以让一部分代码反复执行

while循环: 编写格式:

while(条件){
循环体
}
条件:当条件为true,就执行循环体,执行完循环体后
程序再次执行while中的条件,如果条件还是true,继续执行循环体
知道条件是false的时候,循环结束

public class WhileDemo{
 public static void main(String[] args){
 //输出1-4之间的整数
 //定义变量,整数类型,循环条件
 int i = 1;
 while(i<5){
 System.out.println(i);
 i++;
 }
 }
}

输出结果
在这里插入图片描述

- for循环

for循环
编写格式
for(初始化变量;条件;增量){
循环体
}
初始化变量:定义变量,作用,控制循环的次数
条件:当条件是true,执行循环体,条件是false,结束循环
增量:变量自增情况

public class ForDemo{
 public static void main(String[] args){
 //for循环,输出0-10
 for(int i=0;i<=10;i++){
 System.out.println(i);
 }
 }
}

输出结果
在这里插入图片描述

- dowhile循环

do while循环

编写格式:
do{
循环体
}while(条件);
特点:无条件先执行一次

public class DoWhileDemo{
 public static void main(String[] args){
 int i = 0;
 do{
 System.out.println(i);
 i++;
 }while(i<5);
 }
}

输出结果
在这里插入图片描述

- 死循环

死循环后面的代码将不会被执行,编译时系统报错,因为Java不允许有代码不被执行

public static WhileForDemo{
 public static void main(String[] args){
 //while形式死循环
 /*while(true){
 
 }*/
 
 //for形式死循环
 for( ; ; ){
 
 }
 }
}


- 循环的嵌套

循环的嵌套:循环里面还有循环,for形式用的比较多
for(){

for(){

}

}
总的循环次数 = 内循环次数*外循环次数
内循环,是外循环的循环体

外循环,控制的是行数
内循环,控制的是每行的个数,即列数

public class ForForDemo{
 public static void main(String[] args){
 for(int i=0;i<9;i++){
 for(int j=0;j<i+1;j++){
 System.out.print("*");
 }
 System.out.println();
 }
 }
}

输出结果

*
**
***
****
*****
******
*******
********
*********

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值