本篇文章内容来自尚硅谷java核心基础免费课程的笔记整理(去掉了一些繁杂多余的内容)。
有零基础或者想看视频学习的可以去官网。
http://www.atguigu.com/
因为在深入学习公开的已知漏洞时发现自己的java功底不够。
于是又开了个新坑。
唉 ┭┮﹏┭┮
祝大家情人节快乐~
进制
所有数字在计算机底层都以二进制形式存在。
对于整数,有四种表示方式:
二进制(binary):0,1 ,满2进1.以0b或0B开头。
十进制(decimal):0-9 ,满10进1。
八进制(octal):0-7 ,满8进1. 以数字0开头表示。
十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
如:0x21AF +1= 0X21B0
二进制:
Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位; 当是long类型时,二进制默认占64位,第64位是符号位
二进制的整数有如下三种形式:
原码:直接将一个数值换成二进制数。最高位是符号位
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
负数的补码:其反码加1。
计算机以二进制补码的形式保存所有的整数。
正数的原码、反码、补码都相同
负数的补码是其反码+1
为什么要使用原码、反码、补码表示形式呢? 计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂! 于是 人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正 数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了。
Java运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算术运算符:
注意事项:
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
“+”除字符串相加功能外,还能把非字符串转换成字符串.
赋值运算符 :
符号:=
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %=
编译器自动会将+=,-=,*=,/=,%=运算符后面的操作数强制转换为前面变量的类型
而=却不会
比较运算符(关系运算符):
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
是== 不是 =
逻辑运算符:
&— 逻辑与
| — 逻辑或
!— 逻辑非
&& — 短路与
|| — 短路或
^ — 逻辑异或
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写
成x>3 & x<6 。
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
理解:异或,追求的是“异”!
位运算符 :
位运算是直接对整数的二进制进行的运算。具体如下:
位运算符的细节:
<< : 空位补0,被移除的高位丢弃,空缺位补0。
>> : 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
>>> : 被移位二进制最高位无论是0或者是1,空缺位都用0补。
& : 二进制位进行&运算,只有1&1时结果是1,否则是0;
| : 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1;
^ : 相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0 不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1
~ : 正数取反,各二进制码按补码各位取反。负数取反,各二进制码按补码各位取反
三元运算符:
格式:
(条件表达式)?表达式1:表达式2;
为true,运算后的结果是表达式1;
为false,运算后的结果是表达式2;
表达式1和表达式2为同种类型
三元运算符与if-else的联系与区别:
1)三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果。
3)if后的代码块可有多个语句
运算符的优先级:
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
如下表,上一行运算符总优先于下一行。
只有单目运算符、三元运算符、赋值运算符是从右向左运算的。