JAVA-基本程序设计结构(运算符、进制、位运算、字符串)
1.运算符
运算符是一种特殊的符号,用于表示数据的运算、赋值和比较以及连接值等。
1.算术运算符
算术运算符是对数值类型的变量进行运算。
运算符 | 运算 | 示例 | 结果 |
+ | 正号,表示变量为正数 | +7 | 7 |
- | 负号,表示变量为负数 | b=11;-b | -11 |
+ | 加 | 9+9 | 18 |
- | 减 | 10-8 | 2 |
* | 乘 | 7*8 | 56 |
/ | 除 | 9/9 | 1 |
% | 取模(取余) | 11%9 | 2 |
++ ++ |
自增(前):先运算后取值 自增(后):先取值后运算 |
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 |
+ | 字符串相加 | "wbg"+"ig" | "wbgig" |
1.当参与除法(/)运算的两个操作数都是整数时,/表示整数除法,否则为浮点数除法
整数做除法时,只保留整数部分而舍弃小数部分
2.取模(%)操作的本质:a % b = a - a / b * b
3.整数被0除将产生一个异常,而浮点数被0除将会得到一个无穷大或NaN结果
2.关系运算符
1.关系运算符的结果都是boolean型,true 或 false
2.关系表达式(关系运算符组成的表达式)经常用在 if结构的条件中 或 循环结构的条件中
运算符 | 运算 | 示例 | 结果 |
== | 相等于 | 8==7 | false |
!= | 不等于 | 8!=7 | true |
< | 小于 | 8<7 | false |
> | 大于 | 8>7 | true |
<= | 小于等于 | 8<=7 | false |
>= | 大于等于 | 8>=7 | true |
instanceof | 检查是否是类的对象 | "hsp" instanceof String | true |
3.逻辑运算符
逻辑运算符用于连接多个条件(过个关系表达式),最终结果为boolean型
符号 | 运算 | 规则 | 示例 | 结果 |
& | 逻辑与 | 同真为真,否则为假 |
true & false true & true false & false |
false true false |
&& | 短路与 | 同真为真,否则为假 |
同上 |
同上 |
| | 逻辑或 | 同假为假,否则为真 |
true | false true | true false | false |
true true false |
|| | 短路或 | 同假为假,否则为真 | 同上 | 同上 |
! | 取反(非运算) | 真->假,假->真 |
!true !false |
false true |
^ | 逻辑异或 | 不同为真,相同为假 |
true ^ false true ^ true false ^ false |
true false false |
短路(&&、|| )与逻辑(&、| )
短路&&( || ):如果第一个条件为false(true),则第二个条件不会判断,最终结果为false(true),效率高
逻辑&( | ):不管第一个条件是否为false(true),第二个条件都要判断,效率低
4.赋值运算符
赋值运算符就是将某个运算后的值,赋给指定的变量
1.基本赋值运算符:=
复合赋值运算符:+=、-=、*=、/=、%=等
2.赋值运算符特点
- 运算顺序从右往左
- 赋值运算符左边只能是变量,右边可以是变量、表达式、常量值
- 复合赋值运算符会进行类型转换
byte b+=2; //等价于 byte b = (byte)(b+2)
5.三元运算符
1.基本语法:条件表达式 ? 表达式1 : 表达式2 ;
如果条件表达式为true,运算后结果为表达式1
如果条件表达式为false,运算后结果为表达式2
2.表达式1和表达式2要为可以给赋值接受变量的类型(或可以自动转换)
int a = 3 ; int b = 4;
int c = a > b ? 5 : 2; //对
int d = a > b ? 5.2 : 0.8; //错 double不能自动转为int型
int e = a > b ? (int)5.2 : (int)0.8; //对,强制类型转换了
3.三元运算符是可以转换为 if--else 语句的
4.三元运算符可以相互嵌套
6.运算符优先级
符号 | 运算方向 |
. () {} ; , | 从右到左 |
++ -- ~ !(date type) | 从左到右 |
* / % | 从左到右 |
<< >> >>> (位移) | 从左到右 |
< > <= >= instanceof | 从左到右 |
== != | 从左到右 |
& | 从左到右 |
^ | 从左到右 |
| | 从左到右 |
&& | 从左到右 |
|| | 从左到右 |
?:(三元) | 从左到右 |
= *= /= %= | 从右到左 |
+= -= <<= >>= | 从右到左 |
>>>= &= ^= |= | 从右到左 |
2.标识符
1.标识符
1.标识符概念:
1.Java 对各种变量、方法和类等命名是使用的字符序列称为标识符
2.凡是可以自己起名字的豆角标识符
2.命名规则:
1.标识符由 字母、数字、货币符号以及“标点连接符”组成,首字符不能为数字
2.标识符不可以使用关键字和保留字,但可以包含关键字和保留字
3.Java 严格区分大小写,长度无限制
4.标识符不能包含空格
3.命名规范:
1.包名:多单词组成时所有字母都小写
2.类名、接口名:多单词组成时,所有单词的首字母大写 例如:XxxYyyZzz[大驼峰]
3.变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写 例如:xxxYyyZzz[小驼峰,驼峰法]
4.常量名:所有字母都大写。多单词时每个单词用下划线连接
2.关键字
定义:被Java语言赋予了特殊含义,用作专门用途的字符串
特点:关键字中的所有字母都为小写
class | interface | enmu | byte | short | int |
long | float | double | char | boolean | void |
true | false | null |
if | else | switch | case | default | while |
do | for | break | continue | return |
private | protected | public |
abstract | final | static | synuchronized |
extends | implements |
new | this | super | instanceof |
try | catch | finally | throw | throws |
package | import |
native | strictfp | transient | volatile | assert |
3.保留字
Java 保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。命名标识符时要避免使用这些保留字
byValue、cast、future、generic、inner、operator、outer、rest、var、goto、const
3.进制
1.四种进制
对于整数,有四种表示方式(进制):
1. 二进制:0,1,满2进1,以 0b 或 0B开头
2. 十进制:0~9,满10进1。
3. 八进制:0~7,满8进1,以数字0开头表示
4. 十六进制:0~9 及 A(10)~F(15),满16进1,以 0x 或 0X开头表示,此处A~F不区分大小写
2.进制转换
1.n进制转为十进制:
从最低位(右边)开始,将每个位上的树提取出来,乘以n的(位数-1)次方,然后求和
2.十进制转为n进制:
将该数不断除以n,直到商为0为止,然后将每步得到的余数倒过来,就是对应的n进制
3.二进制转为八进制、十六进制:
八进制:从低位开始,将二进制数每三位一组,转为对应的八进制数
十六进制:从低位开始,将二进制数每四位一组,转为对应的十六进制数
4.八进制、十六进制转为二进制:
八进制:将八进制数每一位,转成对应的一个3位的二进制数
十六进制:将十六进制每一位,转成对应的一个4位的二进制数
4.位运算
1.反码、原码、补码(简述)
1.二进制的最高位是符号位:0表示正数,1表示负数
2.正数的原码、反码、补码都一样(三码合一)
3.负数的反码 = 它的原码符号位不变,其他位按位取反
4.负数的补码 = 负数的反码 + 1,负数的反码 = 负数的补码 - 1
5.0的反码、补码都是0
6.Java 没有无符号数
7.在计算机运算的时候,都是以补码的方式来运算,看其运算结果时,要看其原码
2.位运算符
Java中you7个位运算符
符号 | 运算 | 规则 |
& | 按位与 | 全1为1 |
| | 按位或 | 全0为0 |
^ | 按位异或 | 相同为0,不同为1 |
~ | 按位取反 | 0->1 1->0 |
>> | 算术右移(*2的位移次方) | 低位溢出,符号位不变,并用符号位补溢出的高位 |
<< | 算术左移(/2的位移次方) | 符号位不变,低位补0 |
>>> | 逻辑右移(无符号右移) | 低位溢出,高位补0 |
5.字符串
从概念上讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是标准的Java类库中提供了一个预定义类,很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例。
1.子串
1.String类 substring 方法可以从一个较大的字符串提取出一个子串
PS:Java字符串中代码单元和码点从0开始计数。
substring优点:很容易计算子串的长度。
2.拼接
1.Java语言允许使用+号连接(拼接)两个字符串
2.当将一个字符串与一个非字符串的值进行拼接时,后者会转换成字符串(任何一个Java对象都可以转换成字符串)
3.如果需要把多个字符串放在一起,用一个界定符分隔,可以使用静态join方法
在Java11中还提供了一个repeat方法
3.字符串不可变
1.String类没有提供任何方法来修改字符串中的某个字符。由于不能修改Java字符串中的单个字符,所以在Java文档中将String类对象称为是不可变的。
2.不可变的字符有很大优点:编译器可以让字符串共享。
可以想象各个字符串放在一个公共存储池中,字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串和复制的字符串共享相同的字符。
4.检测字符串是否相等
1.可以使用equals方法检测两个字符串是否相等对于表达式
s.equals(t)
如果字符串s与字符串t相等,则返回true否则返回false。s与t可以是字符串变量,也可以字符串字面量
"Hello".equals(greeting) //是合法的
想要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法
"Hello".equalsIgnoreCase("hello")
2.不要使用 == 运算符检测两个字符串是否相等。这个运算符只能确定两个字符串是否放在同一位置上。
如果字符串在同一位置上,他们必然相等,但是完全可以将多个相等的字符串副本放在不同的位置上
3.如果虚拟机总是共享相等的字符串,则可以使用 == 运算符检测字符串是否相等。但实际上只有字符串字面量会共享,而+或substring 等操作得到的字符串并不会共享
5.空串与Null串
1.空串""是长度为0的字符串,是一个Java对象,有自己的长度(0)和内容(空)。
2.String变量可以存放一个特殊值,null,表示目前没有任何对象与该变量关联
3.若要检查一个字符串是否为null,可以使用以下代码:
if ( str == null )
有时要检查一个字符串既不是null也不是空串,可以使用:
if ( str != null && str.length() != 0 )
首先要检查该字符串是否为null,在一个null值上调用方法会出现错误
6.码点与代码单元
待更新