JAVA-基本程序设计结构(运算符、进制、位运算、字符串)

yzr-zy / 2023-08-31 / 原文

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.码点与代码单元

待更新