文章目录
- 前言
- 常量
- 定义方式
- 分类
- 运算符
- 分类
- 算数运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三元运算符
- 总结
- 练习
前言
本节将学习常量在java中如何表示,以及如何对一个数据进行快速的计算。
常量
一个特殊的变量,当这个变量被赋值后变不能在更改。
下面这个在编译的时候将会报错。
public class HelloWorld {
public static void main(String[] args) {
// 声明局部常量
final double x = 3.3;
x = 3.14;
}
}
定义方式
在java中,使用关键字final
来表示常量。
final double PAI = 3.14;
final int H = 10;
一般java中常量的名字使用全大写,如果包含多个单词的话用“_”连接。
分类
如果变量一样,常量分为三种
- 类常量(静态常量):独立于方法外,static修饰。
- 成员常量:独立于方法外,没有static修饰。
- 局部常量:定义于方法内。
public class HelloWorld {
// 静态常量
public static final double PI = 3.14;
// 声明成员常量
final int y = 10;
public static void main(String[] args) {
// 声明局部常量
final double x = 3.3;
}
}
运算符
分类
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三元运算符
算数运算符
运算符 | 运算 | 示例 | 结果 |
+ | 正号、加法运算 | +3、 1+3 | 3 4 |
- | 负号、减法运算 | b = 3;-b 6-4 | -4 2 |
* | 乘法运算 | 3*4; | 12 |
/ | 除法运算 | 5/5; | 1 |
% | 取模(取余)运算 | 5%5; | 0 |
++ | 自增运算 | a = 2;b = ++a; a = 2;b = a++; | a=3;b=3; a=3;b=2; |
– | 自减运算 | a=2;b = --a; a=2;b=a–; | a=1;b=1; a=1;b=2; |
- 在java中“+”和“-”有两种表示方式,一种是表示两个数的运算,一种是表示其符号(正负数)。
int a = 1;
int b = -a;
b的结果是-1.
- 在运算过程中要注意数据结构的转换。整型默认是int,浮点型默认是double。
int a = 5;
int b = a / 2;
## b的结果是2。因为a / 2都是整型,计算出来的结果是整型,将小数点后面的丢弃。
int a = 1;
double b = a / 3.0;
## b的结果是0.3333333333333333。a被向上提升为1.0.
int a = 1;
double b = a / 3;
## b的结果为0.0,这里a / 3两个都是整型,所以算出来的结果是整型0,随后将0提升为double类型,所以结果为0.0。
- /和%的区别
5/2;## 结果是2.5(这里不考虑数据转换,仅仅从数学的角度)
5%2;## 结果是1
余数为啥等于1呢。
5除以2的时候,取2,2*2 = 4, 5-4 = 1。
这个1就是余数,也就是不能正好被整除掉,而剩下的数就是余数了。
10%3 = 1;
- %取模运算中的符号:由被除数的符号决定
int b = -5 % 2; ## b=-1
int b = 5 % -2; ## b=1
- ++a与a++的区别(–a与a–):不建议使用。
++和–:表示的是递增和递减,每次加1或者减1.a++相当a = a +1;
++a(–a):先做运算后赋值,
a = 2;b = ++a;
## 先将a+1,然后在把结果赋给b,所以a = 3,b=3;
a++(a–):先赋值后运算。
a = 2;b = a++;
## 先将a的值赋给b,然后在a+1,所以a = 3,b=2;
赋值运算符
=、+=、-=、*=、/=,%=
运算符 | 示例 | 结果 |
= | int i = 3; | 3 |
+= | int i =1;i += 2; | 3 |
-= | int i = 2;i -= 1; | 1 |
*= | int i=2;i *= 2; | 4 |
/= | int i = 4;i /= 2; | 2 |
%= | int i=5;i %= 2; | 1 |
在java中“=”是用于赋值的,不是用于判断两个数是否相等。
int i = 3;## 是将3赋值给i,使i的值等于3.
+=:a+=2;相当于a = a+2。
-=:a-=2;相当于a=a-2;其他同理。
- a = a +2 与a +=2的区别
- a = a+2:先进行a+2运算,随后在将算出来的结果赋值给a。
- a +=2;直接将a的值加2.这个只执行了一次运算。
比较运算符
运算符 | 运算 | 示例 | 结果 |
== | 等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是某类的对象 | “hellow” instanceof String | true |
- ==与=的区别
==:用于判断两个值是否相等。
= :给一个数据赋一个值。 - 比较运算符返回的结果是boolean类型的,只有true和false。
逻辑运算符
运算符 | 运算 | 示例 | 结果 |
& | 与 | false&true | false |
| | 或 | false|true | true |
^ | 异或 | true^false | false |
! | 非 | !true | false |
&& | 短路与 | false&&true | false |
|| | 短路或 | false||true | true |
- 用法
- 表示数学中的1 < x < 4。
在java中可以这样表示
x>1 & x<4;
- &(|)与&&(||)的区别
在判断的x > 1 & x < 4
的时候,如果x > 1
为false,那么其实结果已经为false,根本不用在判断x < 4
,短路与(&&)和短路或(||)就是用于解决该问题。
x > 1 && x < 4 :当x > 1为fasle时,结果为false,不用执行x < 4.
x > 1 && x < 4 :当x > 1为true时,结果为true,不用执行x < 4.
位运算符
运算符 | 运算 | 示例 | 结果 |
& | 与 | 0b1101 & 0b0110 = 0b0100 | 13 & 6 = 4 |
| | 或 | 0b1101 | 0b0110 = 0b1111 | 13 | 6 = 15 |
^ | 异或 | 0b1101 ^ 0b0110 = 0b1011 | 13 ^ 6 = 11 |
~ | 反码 | ~6 = -7 | false |
<< | 左移 | 3 << 2 | 12 |
>> | 右移 | 3 >> 1 | 1 |
>>> | 无符号右移 | 3 >>> 1 | 1 |
- 二进制中的运算。
&: 两个同时为1,结果为1,否则为0。
|: 其中一个为1,则为1,否则为0。
^: 相同时为0,不同则为1
0b1101 & 0b0110 = 0b0100 (13 & 6 = 4)
0b1101 | 0b0110 = 0b1111 (13 | 6 = 15)
0b1101 ^ 0b0110 = 0b1011 (13 ^ 6 = 11)
- 位运算符与逻辑运算符的区别(&、|、^)
逻辑运算符返回boolean类型的值,符号左右两边为boolean类型数据或表达式。
位运算符返回的整形数据,符号两边为整形类型数据。 - 反码:1的反码0,0的反码1.
java中的负数表现形式为相应正数取反加1,如-6的表现形似为,6取反加1。
0000... 0110(6)反码=1111... 1001,加1以后得1111 1010(-6)。
则一个已经知道一个负数的二进制,相应的十进制则为负数减1去反.如1111 1010(-6)
减一:1111... 1001 取反: 0000... 0110(6)
~6 = -7
6的反码为1111... 1001,随后将该二进制转化为十进制为 -7
- 移位运算(<<、>>、>>>)
先将数据转换为二进制,分别移动对应的位数
<<:空位补0,被移除的高位丢弃,空缺位补0
>>:被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
>>>:被移位二进制最高位无论是0或者是1,空缺位都用0补。
3<<2:0000... 0011 左移两位、空位补0,变成 0000... 1100
3>>1:0000... 0011 右移一位、由于最高位是0,则空位补0,变成 0000... 0001
-3>>1:1111... 101 右移一位、由于最高位是1,则空位补,变成 1111... 1110
3>>>1:0000... 0011 右移两位、空位补0,变成 0000... 0001
-3>>>1:1111... 101 右移一位、空位补0,变成 0111... 1110
三元运算符
格式:(条件表达式)?表达式1:表达式2;
- 条件表达式为true,返回表达式1
- 条件表达式为false,返回表达式2
(3>4)?3:4
结果为4
总结
- java中的常量,用
final
修饰的变量 - 运算符
- 算术运算符:用来进行两个数据的运算。
- 赋值运算符:给一个数据赋值。
- 比较运算符:比较两个数据,返回boolean类型数据。
- 逻辑运算符:用来连接多个表达式,或将单一的表达式转变为复杂的表达式,返回boolean类型数据。
- 位运算符:对二进制数据进制移位运算。
- 三元运算符:根基条件返回不同的表达式。
散会!!!
练习
- 快速计算2*8(8/4).
2*8 : 2 << 3
8/4 : 8 >> 2
- 在不使用中间变量的情况下,将两个变量的数据交换
使用中间变量
inti i = 2,j = 3;
int k = i;
i = j;
j = k;
不使用中间变量
int i = 2 ,j=8;
i = i^j;
j = i^j;
i = i^j;
ps:如果大家在观看的时候发现有拼写错误,代码错误以及内容混淆的地方,希望大家积极反馈,我及时进行更改,谢谢大家