Java基础3--运算符--判断--循环

本文详细介绍了Java中的各种运算符,包括比较运算符、逻辑运算符、位运算符等,并探讨了它们的工作原理和使用场景。此外,还深入讲解了Java中的控制流程语句,如if-else、switch、while及for循环的使用方法及其间的区别。
摘要由CSDN通过智能技术生成

3-1,比较运算符&逻辑运算符

1,比较运算符:>,<,==,!=,>=,<=

如果用==比较两个引用类型变量,比价的是内存地址。

比较运算符运算完的结果必须是true或false。

2,逻辑运算符

&(AND与)、|(OR或)、^(XOR异或)、!(NOT非)、&&(AND短路与)、||(OR短路或)

逻辑运算符用于连接两个boolean类型的表达式。

例如:

int x = 3;

system.out.println(x>2 & x<5);

打印结果时true,如果x=6,则结果时false。

另外的比较运算:instanceof,检查是否是类的对象。

例如:”Hello” instanceof String 是true。

 

3,异或:^

true ^ true = false

true ^ false = true

false ^ true = true

false ^ false = false

异或的运算规律:^符号的两边结果如果相同,结果是false,两边的结果不同,结果是true。

 

4,!!true = true

 

5,&&和&的区别:

&&和&运算结果时一样的,但是运算过程有点小区别。

&:无论左边的运算结果是什么,右边都参与运算;

&&:当左边为false时,右边不参与运算。

 

||和|的区别:

||和|运算结果时一样的,但是运算过程有点小区别。

|:无论左边的运算结果是什么,右边都参与运算。

||:当左边为true时,右边不参与运算。

 

3-3,位运算符

1,二进制位的运算:

<<(左移)、>>(右移)、>>>(无符号右移)、&(与运算)、|(或运算)、^(异或运算)、~(反码)。

 

2,十进制数的位运算是先将一个十进制数转换为二进制,再对二进制位进行位运算,再将得到的二进制转换为十进制。

例如:&运算,计算6&3

6的二进制是110,3的二进制是011.

所以:(1表示true,0表示false)

  110

&011

  010

再将010转换为十进制,所以6&3=2。

|、^、~与&类似。

 

3,&运算的小规律。

两个数进行&运算,取两串二进制数中第一个’1’在较低位的那串,然后只取两串中1后面的位数运算即可,因为两边只要有一个为0,其结果就为0,不是二进制中的有效数字。

例如:

  11010111

&00010001

第二串的第一个1在较低位,所以两串中的数只计算这一位后面的即可,因为前面的三个0与任何数做&运算,都是0,0不是有效位。

 

4,规律:6^3=5

 110

^011

 101

^011

 110

即:6^3^3=6

规律:一个数异或同一个数两次,结果还是这个数。

此规律可以用于加密。例如:将一个图片的底层二进制码异或3,此时这张图片已经不能看,若将这张图片的底层二进制码再异或3,这张图片又能正常使用。

 

5,~反码:二进制取反,即0变为1,1变为0。

 

3-4,位移运算符

1,<<

左移几位其实就是该数乘以2的几次方。

3<<2=12, = 3*22

<<可以完成2的次幂运算。

<<图示:


2,右移:补位时,最高位是什么就用什么补。

右移几位其实就是该数据除以2的几次方。

 

3,>>>:无符号右移。数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。

 

4,位运算练习:

对两个整数变量的值进行交换。

//(1)有第三方变量:
int a = 3 , b = 5;
int c;
c = a ;
a = b;
b = c;
sop(“a=”+a+”,b=”+b);
//a=5,b=3
//(2)无第三方变量
int a = 3 , b = 5;
a = a + b;
b = a – b;
a = a – b;
sop(“a=”+a+”,b=”+b);
//a=5,b=3
//这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化。
(3)无第三方变量
//位运算法,一个数异或同一个数两次,结果还是这个数。
int a = 3 , b = 5;
a = a ^ b;   //a = 3 ^ 5
b = a ^ b;   //b = (3 ^ 5) ^ 5; b = 3
a = a ^ b;   //a = (3 ^ 5) ^ 3; a = 5
sop(“a=”+a+”,b=”+b);
//a=5,b=3
//一般都用第一种方式,因为阅读性强。

3-5,三元运算符

格式: (条件表达式)?表达式1:表达式2;

如果条件表达式结果为true,则返回表达式1的结果,否则返回表达式2的结果。

int x=0,y;
y = (x > 1)?100:200;
sop(y);

结果:y=200;

例:获得三个整数中较大的整数。

int o,p,q;
itn temp = o>p?o:p;
int max = temp>q?temp:q;
sop(“max=”+max);

3-6,语句——if格式

int a=3,b;
if(a>1)
	b=100;
else
	b=200;
sop(“b=”+b);

虽然b没有被初始化,但if语句都要执行,可以输出b的结果。

b = a>1?100:200; //三元运算符就是if else语句的简写形式。
b = a>1?sop(100):sop(200);  //这个式子中,b没有赋值,三元运算符是运算符,必须有一个运算结果,而if else语句可以没有运算结果。

简写格式什么时候用?

当if-else运算后,有一个具体的结果时,可以简化写成三元运算符。

 

2,if-else


if-->else if-->else if-->else是一条语句,从上到下执行,if(x>1)匹配,则执行它后面的语句,后面的else if-->else if-->else都不执行。


3,if(false);

    {sop(“Helloworld!!”);}

这种情况编译不报错,if后有分号时,if语句的执行体为空,结束了if语句,后面的输出语句与if语句没有一点关系,打印出Hello world!!若if后无分号,则sop为执行体,条件为false,不执行执行体,不打印Hello world!!。

 

3-7,局部代码块

1,在一个函数中用一对{}表示这对大括号之间的部分是局部代码块。

用处:用于定义局部变量的生命周期。


此时编译报错,m的定义在局部代码块中,局部代码块结束后,m被自动释放,故sop(“over..”+ m)中的m将无法找到。M的作用域仅在局部代码块中。主函数中的变量全部是局部变量。

 

2,局部代码块可以定义局部变量的声明周期。如果一个变量仅在一个区间内有作用,那么可以将该区间用{}括起来,当该区间结束时,变量被自动释放,有利于程序的优化。

 

3-8,语句-switch

1,只有4中数据类型供switch选择:byte,short,int,char。

2,无论default的位置在哪,都先读第一个case语句。

3,最后一个case中的break可以不写,switch语句执行到大括号结束。

4,若default在开头或中间,且其中没有break,则:若case都不匹配,执行default,执行default后会继续执行后面的case语句,不再对case进行判断,直接执行case中的代码。

 

3-9,switch-练习。

int month = 3;
switch(month){
	case 3:
	case 4:
	case 5:
		sop(month+"月对应的是春季");
		break;
	case 6:
	case 7:
 	case 8:
		sop(month+"月对应的是夏季");
		break;
	case 9:
	case 10:
	case 11:
		sop(month+"月对应的是秋季");
		break;
	case 12:
	case 1:
	case 2:
		sop(month+"月对应的是冬季");
		break;
	default:
		sop(month+"月没有对应的季节");
}

这样写swtich-case语句,提高了复用性,提高程序的效率,简洁易读。

 

3-9,if语句和switch语句的区别。

1,if和switch的应用。

if:

(1)对具体的值进行判断。

(2)对取件判断。

(3)对运算结果是boolean类型的表达式进行判断。

switch:

(1)对具体的值进行判断。

(2)值得个数通常是固定的。

对于几个固定的值得判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高一点。

后期对switch又加入了枚举和字符串两种判断类型。

 

3-10,while练习-计数器思想:

打印1-100内6的倍数出现的次数。

int x = 1;
int count = 0;
while(x<=100) {
	if(x%6==0) //可以被6整除
		count++;
	x++;   //增量x+1,不加1会出现死循环。
}
sop("count=" +count );

3-11,for语句。

for语句格式:

for(初始化表达式;循环条件表达式;循环后的操作表达式)

{执行语句;(循环体)}

例1:

int x = 1;
for(sop("a");sop("b");sop("c")){
	sop("d");
	x++;
}

这个例子编译失败,因为中间的条件表达式运算结果必须是boolean型。初始化表达式有多个时,用逗号分开。

例2:

int x = 1;
for(sop("a");x<3;sop("c")){
	sop("d");
	x++;
}

编译通过,打印a d c d c。

for语句的执行:初始化表达式只读一次,判断循环条件,为true就执行循环体,然后在执行循环后的操作表达式,接着继续判断循环条件,重复这个过程,知道调节为false为止。

 

3-12,for和while的区别。

1,for和while的特点。

(1)for和while可以互换。

(2)格式上的不同,在使用上有点小区别。

如果需要通过变量来对循环进行控制,该变量只作为循环增量存在时,区别就体现出来了。

例如:打印1-10十个数字。

int x = 1;
while(d<5){
	sop("x=" + x);
	x++;
}
sop("x==="+x);

打印:

x=1

x=2

x=3

x=4

x===5

---------------------------------------

for(int y=1;y<5;y++) {
	sop("y=" + y);
}
sop("y==="+y);

打印:

y=1

y=2

y=3

y=4

最后一句报错,因为y是在for循环内定义的,是for的局部变量,for结束后自动释放y,所以后面的y找不到变量。

 

2,无限循环的最简单形式。

while(true){}

for(;;){}  //中间的条件表达式默认是true。

无限循环存在的原因是:并不知道循环多少次,而是根据某些条件来控制循环,当满足某些条件的时候,跳出循环(break)。

 

 

3-13,循环结构的使用场景。

当对某些代码执行很多次时,使用循环结构完成。

当对一个条件进行一次判断时,可以使用if语句。

当对一个条件进行多次判断时,可以使用while语句。

注意:

在使用循环时,一定要明确哪些语句需要参与循环,哪些不需要。

循环通常情况下,需要定义条件,需要控制次数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值