JAVA基础之操作符

JAVA操作符

  • 使用java操作符
几乎所有的操作符都只能操作“基本类型”
“=”、“= =”和“!=”,它们能操作所有对象
String类支持“+”和“+=”
  • 基本类型
整型:int,short,byte,long 
浮点型:float,double 
字符:char 
布尔:boolean
类型字节
boolean1/8
byte1
char2
short2
float4
int4
long8
double8

优先级

先乘除后加减
字符串连接:String后跟一个“+”,+后非String类型就会自动转换为String类型

赋值

基本类型赋值:将一个地方的内容复制到了另一个地方(基本类型存储的是实际的值)
对象赋值(别名现象):将引用从一个地方复制到了另一个地方(一定要小心)
方法别名:
void f(Letter t) {t.c = 'a';}  //t对象中内容会被改变

算术操作符

  • 算术操作符
双目运算符包括:(加)+,(减)-,(乘)*,(除)/,(求余)%
              +=、-=、*=、/=、%=
单目运算包括:+(正),-(负),++(自增),--(自减)
  • 当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则
运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。

short s1 = 1; s1 = s1 + 1; //错误,高位转低位需要强制转换/低位转高位自动转,将int赋值给short需要强制转换
short s1 = 1; s1 += 1; //正确,s1+=1等效于s1=(short)(s1+1)
  • 一元+ -操作符
一元减号-(负)用于转变数据的符号
一元加号+(正)用于将较小的操作数提升为int
  • 自增(++),自减(--)操作符
++在前就是"先加后赋"(++i)
++在后就是"先赋后加"(i++)
  • 注意事项
1)这些运算符的运算对象可以是byte、short、int、long、float、double、char类型,其中char类型在运算时被自动转为int型。
2)在Java中,整数被0除或对0取余属于非法运算,将抛出AtrthemticExcerption。
3)求余运算(%)的两个运算对象不但可以是整数,也可以是浮点类型;不但可以是正整数,也可以是负整数,其计算结果的符号与求余运算符左侧的运算对象符号一致。
4)如果参与除法运算的两个运算对象都属于整型,则运算为整除运算,若希望得到小数部分的商值则需要对其中一个运算对象的类型作强制转换。A/(float)B
5)运算符“+”的运算对象可以使String,它的操作含义是将两个字符串连接。

关系操作符

  • 关系操作符
大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)和不等于(!=)
等于和不等于适用于所有基本类型,其他比较符不适用于boolean类型
  • 测试对象等价性
==与!=也适用于所有对象,比较的是对象的引用
比较对象的实际内容是否相等,使用equals(),此方法不适用于基本类型,基本类型直接使用==和!=即可
注意:equals()默认行为是比较引用,大多数类库都实现了equals()方法用来比较对象的内容;自己定义的类中要达到这种效果,需要重写该方法。

逻辑操作符

  • 逻辑操作符
与(&&),或(||),非(!)
“与”,“或”,“非”只应用于布尔值
如果在应该使用String值的地方使用布尔值,布尔值会自动转换成适当的文本形式
  • 短路
在逻辑表达式中,如果能通过逻辑运算符左边表达式的值就能推算出整个表达式的值,那么将不再继续执行逻辑运算符右边的表达式。(&&,||)

直接常量

  • 直接常量后面的后缀字符标志了它的类型
大写(小写)的L,代表long
大写(小写)的F,代表float
大写(小写)的D,代表double

注:如果编译器能正确识别类型,就不必在数值后附加字符
十六进制:以前缀0x(0X),后面跟随0-9或小写(大写)a-f来表示
八进制:以前缀0,后面跟随0-7来表示
  • 转二进制
Integer.toBinaryString
Long.toBinaryString

指数计数法

在java中e代表10的幂次,eg: 10E2 //10的2次方 10e-5 //10的-5次方
编译器通常会将指数作为双精度数(double)处理

按位操作符

按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果
与:1&1==1 1&0==0 0&0==0 //同为1时,输出1;否则输出0
或:1|1==1 1|0==1 0|0==0 //同为0时,输出0;否则输出1
非:~0==1 ~1==0 //取反操作,属于一元操作符,不可与“=”联合使用
异或:1^0==1 1^1==0 0^0==0 //不同为1,同为0
按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=,|=和^=
可将布尔类型作为一种单比特值对待,可对它执行按位“与”,“或”,“异或”运算,不能执行按位“非”。eg: true & false
  • 交换两个数
   public int[] swapNum(int num1, int num2) {
       num1 = num1 ^ num2;
       num2 = num2 ^ num1;
       num1 = num1 ^ num2;
       int[] nums = {
               num1, num2
       };
       return nums;
   }

移位操作符

  • 左移 <<
将操作符左边的操作数向左移动,低位补0
  • 有符号右移 >>
将操作符左边的操作数向右移动,如符号为正,高位插入0;若符号为负,高位插入1
  • 无符号右移 >>>
将操作符左边的操作数向右移动,无论正负,都在高位插入0
  • 小结
移位操作符操作的运算对象也是二进制的“位”
移位操作符只用来处理整数类型
对char、byte或short进行移位处理,在移位之前,会被转换为int类型,得到的结果也是int类型
移位可与等号组合使用(<<= 或 >>= 或 >>>=),在对char或short进行>>>=时,可能得到不正确的结果

三元操作符

result = boolean-exp ? value0 : value1;
如果boolean-exp计算结果为true,那么result为vaulue0,否则result为value1

类型转换操作符

java允许把任何基本数据类型转换成别的基本数据类型,但布尔类型除外
  • 窄化转换
将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型,需要显示的强制转换,因为可能会面临信息丢失危险
int i = 1;
short s = (short) i; 
在进行窄化转换时,当浮点数转换为整型时,会对浮点数进行截尾操作,并不会四舍五入(Math.round()可以实现)
  • 扩展转换
不必显示的进行任何类型的转换,因为新类型肯定能容纳原来类型的信息,不会造成任何信息的丢失
short s = 1;
int i = s;
  • 类型提升
如果对基本类型执行算数运算或按位运算,只要类型比int小(即char,byte,short),那么在运算前,这些值会自动转换成int
通常,表达式中出现最大的数据类型决定了表达式最终结果的数据类型。eg:float与double相乘,结果就是double
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值