3.操作符、流程控制符

第三章【操作符、流程控制符】

一、变量

1、根据变量位置划分:
  • 局部变量:
  1. 位置

​ 方法中声明的变量

​ 方法的代码块中的变量

​ 方法的参数列表的位置

  1. 是不是默认进行初始化

​ jvm不会给局部变量默认值

​ 所以使用局部变量时需要自己进行初始化

  1. 作用范围

​ 声明这个变量开始到这个变量直接所属的{}结束

  1. 生命周期

​ 声明这个变量开始到这个变量直接所属的{}结束

​ 方法的参数列表的生命周期为他所在方法的{}结束

  1. 修饰符不同

​ public (范围修饰符) static(静态修饰符) 等不能修饰局部变量

​ final 可以使用

  • 实例变量:(成员变量)
  1. 位置

    位于类的内部,方法的外部,不能用static修饰

  2. 是不是默认进行初始化

    jvm给实例变量默认值

    数据类型 byte short int long float double char boolean String
    初始值 0 0 0 0 0.0 0.0 ' ' (空格) false null
  3. 作用范围

    非静态方法中直接访问

    静态方法或者其它类中构建对象访问

  4. 生命周期

    构建对象后存在,对象销毁后消失

  5. 修饰符

    不能用static修饰,可以用public修饰

二、操作符

1、赋值操作符

= *= /= %= += -=

a=a+1; byte/short累加会做数据类型提升,建议使用a+=1;

a++; 先使用a,然后做a+=1
++a; 先做a+=1,然后使用a

2、比较操作符

> < >= <=:表过后产生boolean类型的结果

instanceof:判断一个对象能不能用某个类接收,只能是引用数据类型使用

System.out.println("hello" instanceof String);

​ 使用instanceof判断的类型和被判断的对象没有任何关系时报错

3、相等操作符

== !=

既可以比较基本数据类型,也可以比较引用数据类型

4、算术运算符

+ - * / %

注意+:

  • 数值相加
  • 字符串拼接:两边至少一方出现字符串

String str = a+b+c+"hello"+d+true;

5、移位操作符[速度最快]

所有的移位操作都是基于2进制数(十进制数--->二进制数--->移位--->十进制数)

  • 右移位:2进制数往右推,往左边补位

    带符号右移:

    ​ 正数右移之后,最左边空出的位置,都要补0

    【本质就是除以2n,这个n就是我们右移的位数,除以2nd之后,只保留整数部分】

    ​ 负数右移之后,最左边空出的位置,都要补1

    byte a=12

    12的原码0000 1100

    ​ 右移0000 0011【3】

    byte a=-12

    -12的原码1000 1100

    ​ 反码1111 0011

    ​ 补码1111 0110【负数的二进制数也就是该数的补码】

    ​ 右移1111 1101

    回退-1补码1111 1100

    ​ 反码1000 0011

    ​ 原码-3 【右移的结果】

    不带符号右移:空余位不管正负数统一补0,负数变大

  • 左移位:2进制数往左推,往右边补位

    【本质就是乘以2^n,这个n就是我们左移的位数,正负不变】

    如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模/取余。

6、位运算符

& 与运算

|或运算

^异或运算

~取反运算

int a = 3;//0000 0011	省略24位
System.out.println(~a);	//1111 1100-->1111 1011 --> 1000 0100  = -4	(取反--->补码-1--->反码)

//交互俩个变量的值,但是不是要中间变量
a=a^b;
b=a^b;
a=a^b;

7、逻辑运算符

&& 短路与

||短路或

&& 只能作为逻辑运算符,但是它会具备短路的功能

8、条件运算符

三目运算符,可以嵌套使用

语法:

boolean表达式 ? 表达式1 : 表达式2

9、优先级问题
image-20210114143528422

三、类型转换

1、基本类型
2、引用类型

四、流程控制

if

switch

for

while

do-while

//循环	jdk1.5新特性	增强for循环【不能改变值,只是遍历一遍】
		/*
		 * 语法:
		 * for(数据类型  变量名 :容器){
		 * 		System.out.println(变量名);
		 * }
		 */
		for(String str:args) {
			System.out.println(str);
		}

五、break

break 的意思是退出,结束当前的循环或switch代码。

六、continue

continue 的意思是结束本次循环,让循环直接进入一次的运行。

七、label

如果想让break或continue针对某一个指定的循环起作用,那么可以使用label标签给循环起名字,然后使用break或continue加上循环的名字即可。

八、Random

posted @   可乐爱兑姜汁  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示