课程内容:
-
Java中的运算符
-
Java中的变量
Java中的运算符:高 -》 低
-
[+ - * / %]
-
+:当+遇到String类型的时候 不再表示算数加法 而是表示追加连接
-
任何一个数据类型想要变成String +""
-
int x = 45;
-
String y = x+"";
-
-
*:当心数值超出int类型最大边界 注意使用long类型
-
/:整数 除以 整数 结果一定是整数
-
%:取模运算符 求余数 最终结果的符号位取决于参与运算的第一个数的符号
-
-
+= -= *= /= %=....
-
优势:他们可以保证运算符的左边的数据类型不发生改变 -》 其实底层已经发生隐式的强转
面试题:
short x = 1;
x = x + 1;//short = int
System.out.println(x);//报错 损失精度
short y = 1;
y += 1;//y = (short)(y + 1);
System.out.println(y);//2
-
-
++ --[自增自减运算符]
-
[a:取值 b:运算 x++:ab ++x:ba]
-
-
[> < >= <= ! = != ==]
-
[> < >= <=]结果都是boolean类型的判断句 -》 true/false
-
!:非 !boolean !true = false !false = true
-
!=:判断左右两边的值是否不相等
-
System.out.println(45 != 66);//true
-
-
==:判断左右两边的值是否相等
-
System.out.println(gender == '女');
-
-
=:赋值运算符 将右侧的值交给左侧的变量保管
-
int age = 45;
-
-
-
&& || & | [逻辑运算符]
-
面试题:&&和&之间的区别?
相同点:&&和&都是逻辑的与 相当于汉文中的并且的意思 需要前后两个条件同时成立才能执行
不同点:&&叫做逻辑的短路与 有短路特性
短路特性:如果通过前面的条件可以得出最终结果的话 后面的条件直接舍弃不再判断
18岁的女生 -> age == 18 && gender == '女'
例子1如果晚上我有空的话 而且你们愿意 那么我请大家吃饭
if(我有空 && 你们愿意){
我请大家吃饭
} -
面试题:||和|之间的区别?
相同点:||和|都是逻辑的或 相当于汉文中或者的意思 需要前后一个条件成立就能执行
不同点:||叫做逻辑的短路或 有短路特性
例子:火车站买票 -》 出示证件
身份证 || 驾驶证 || 户口本 || 护照...
boolean && boolean
true 判断
false 短路
boolean || boolean
true 短路
false 判断
-
-
& | ^ ~[按位[二进制]运算符]
-
基础用法【了解】
&:按位的与 要求上下二进制都是1才能写1 逢0写0
System.out.println(9 & 5);//1
9:8 + 1 = 000..0001001
5:4 + 1 = 000..0000101 &
000..0000001 -》 1
|:按位的或 要求上下二进制只要有1就写1 逢1写1
System.out.println(9 | 5);
9:8 + 1 = 000..0001001
5:4 + 1 = 000..0000101 |
000..0001101 = 8 + 4 + 1 = 13
^:按位的异或 上下二进制不一样的时候才能写1
System.out.println(9 ^ 5);
9:8 + 1 = 000..0001001
5:4 + 1 = 000..0000101 ^
000..0001100 : 4 + 8 = 12
~:按位的取反 0-》1 1-》0
10101010 ~
01010101 -
重点
&:在某些情况下可以取代%
当我们拿着一个正数 % 上2的n次方数的时候
结果等价于
我们拿着这个正数 & 上2的n次方数-1的结果
27 %2 %4 %8 %16.... %2(n)
1 3 3 11
27 &1 &3 &7 &15.... &2(n)-1
1 3 3 11
^:可以不借助第三块空间的方式交换两个的变量值
int x = 45;
int y = 40;
int z = x;
x = y;
y = z;
x = x ^ y;
y = x ^ y;
x = x ^ y;
能够使用^交换的数据类型只有:
boolean char byte short int long
-
-
[<< >> >>>]位[二进制]移运算符
<<相当于乘以 >>相当于除以
移动多少位相当于乘以/除以2的几次方数
*2 *4 *8 *16.... *2(n)
<<1 <<2 <<3 <<4.... <<n
/2 /4 /8 /16.... /2(n)
>>1 >>2 >>3 >>4.... >>n
System.out.println(100 * 8);/、100+100+100+100
System.out.println(100 << 3);//二进制
>>和>>>之间的区别?
>>叫做有符号右移 移动之后空缺的高位看原本的符号位
01111010 >> 2
00011110
10001010 >> 3
11110001
>>>叫做无符号右移 移动之后空缺的高位直接补0
01111010 >>> 2
00011110
10001010 >>> 3
00010001 -
? : [三目运算符 三元运算符]
-
boolean ? 2 : 3
-
如果第一部分结果为true 那么执行第二部分
-
如果第一部分结果为false 那么执行第三部分
-
总结
必学:
+ - * / %
++ --
> < >= <= ! = != ==
&& ||
选学【提高效率/简化代码 各种取代】
+= -= *= /= %=...
&:取代% ^:交换两个变量的值
<<取代* >>:取代/
? : 取代if else
Java中的变量:
-
面试题:Java中的变量分为哪几种变量?
成员变量 实例变量 属性:定义在类体里面 方法体外面的变量
局部变量 自动变量:定义在方法体里面的变量
*:Java中没有全局变量的概念 -
面试题: 成员变量和局部变量之间的区别?
定义的位置不同
成员变量:定义在类体里面 方法体外面
局部变量:定义在方法体里面
作用范围不同:
成员变量:也叫属性 表示对象有什么 成员变量依赖于对象存 在 当我们new对象的时候 属性也会创建
当对象消亡的时候 属性伴随着也会消亡
局部变量:从定义的那一行开始 一直到所在的方法体执行结束 之前可以访问的 一旦所在的方法体执行结束 局部 变量消亡 依赖于方法存在 只有方法调用 代码走到 那一行才能创建 方法执行完 局部变量消亡
默认值不同:
成员变量:即使不赋值 也有默认值 默认值为什么看数据类型
局部变量:没有默认值 要求使用之前必须先赋值
基本数据类型的默认值:
boolean char byte short int long float double
false '\u0000' 0 0 0 0L 0.0F 0.0D
引用数据类型的默认值:
String
null[空] -
成员变量和局部变量可以重名
-
在成员变量和局部变量重名的时候 如果直接访问该变量默认是局部变量
-
如果想要访问成员变量 需要在变量的前面加上this.
-
this:表示当前方法的调用者
-