第三章 操作符

简介

在最底,java中的数据是通过操作符来操作的。

使用java操作符

操作符接受一个或多个参数,并生成一个新值。

优先级

当一个表达式存在多个操作符时,操作符的优先级就决定了各部分的计算顺序,这里最常见的就是先乘除后加减,使用括号明确规定计算顺序。这里想必大家都明白

赋值

赋值使用操作符"="。它的意思是取右边的值,把它复制给左边。右值可以是任何常数,变量或者表达式(只要它能生成一个值)。而左值必须是一个明确的,已命名的变量。

举例
a=4;//ok
4=a;//error

这里谈谈基本类型赋值引用类型赋值的区别:

  1. 基本类型:基本类型存储了实际的数值,而不是指向一个对象的引用,所有在赋值的时候,是直接将一个地方的内容复制到了另外一个地方。例如,对基本数据类型a=b,那么b的内容就复制给了a。若接着修改了a,而b本身不会受这种修改的影响。
  2. 引用类型:作为对象赋值的时候,情况和上述则不一样。对一个对象进行操作的时候,实际上我们真正作用的是对象的引用,所有将一个对象赋值给另外一个对象,实际上是将引用从一个地方赋值到另外一个地方。这意味着对对象使用c=d,那么c和d都指向原本d指向的那个对象。

算术操作符

java的基本算数操作符与其他大多数程序设计语言是相同的。其中+,-,*,/已经取模%。

一元加减操作符

一元减号(-)加号(+)和二元的加减都是使用相同的符号,根据表达式的书写形式,编译器会自动判断出使用的是哪一种,例如:

x=-a;
//编译器也能识别下面的语句
x=a*-b;
//但是读者很容易被这样的书写搞糊涂,所以使用下面的语句更清晰
x=a*(-b);

一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,但它唯一的作用仅仅是将较小的类型的操作数升级为int。

自增,自减

java提供了大量的快捷操作符,而自增自减都是很常用的。
“+ +”:代表增加一个单位
“- -”:代表减少一个单位
上面两个操作符都可以位于变量或者表达式前后,如(++a或- -a)会先指向运算,再生成值,而(a++,a- -)会先生成值,后执行a+1或者a-1的运算。
举例:

int a=0;
int x;
x=a++;
//x的值为0,因为后自增先将a=0赋值给x,后a=a+1;

关系型操作符

关系型操作符生成的是一个boolean结果,表示是否真实,如果表达式为真则返回true,如果表示为假则返回false。
关系型操作符包括<(小于),>(大于),<=(小于等于),>=(大于等于),==(等于),!=(不等)。

其中==和equals()

可以查看此文章
https://blog.csdn.net/qq_44819486/article/details/109383353

逻辑操作符

与(&&),或(||),非(!)能根据参数的逻辑关系生成一个boolean值(true或者false)
对于这三者的优先级 !的优先级最高,&&的优先级居中,||的优先级最低。

 //   逻辑运算符号:
    &&(与):两者为true才为true,否则为false||(或):两者为false才为false,否则为true

按位操作符

按位操作符用来操作整数基本类型中的单个bit也就是二进制。
下面举例

    按位运算符号:
    &(与):转换为2进制;1&1=11&0=00|1=00&0=0
    |(或):转换为2进制;1|1=11|0=10|1=10|0=0

    异或运算符号
    ^:相同则为0,否则为1
    1^1=0
    1^0=1
    0^1=1
    0^0=0

位移操作符

位移操作符操作的运算对象也是二进制的

<<      :     左移运算符,num << 1,相当于num乘以2
	注意:负数先换算成补码,让后位移,再求源码

>>      :     右移运算符,num >> 1,相当于num除以2
	注意:负数先换算成补码,让后位移,再求源码
	
>>>    :     无符号右移,忽略符号位,空位都以0补齐

三元操作符if-else

三元操作符也叫条件操作符,它显得有些特别,因为它有三个操作数。
格式如下:

boolean-exp?value1:value2

如果boolean-exp布尔表达式结果为true则为value1,false则为value2。

x=10>9?1*2:2:3;
//因为10>9为true,则结果为1*2,所以x=2.

字符串操作符+和+=

这个操作符在java中有一项特殊用途:链接不同的字符串。

int a=1,b=2,c=3;
String s="aaa";
print(s+a);
s+="ccc";
print(s);
//输出
//aaa1
//aaa1ccc

类型转换操作符

类型转换(cast)的原意是“模型铸造”。在适当的时候,java会将一种数据类型自动转换成另一种。假设我们为某浮点变量赋值以一个整数值,编译器会将int自动转换成float。类型转换运算允许我们显式地进行这种类型转换,或者在不能自动进行转换的时候强制进行类型转换。

int i=1;
long lng=(long)i;

如上编译器虽然会自动将int类型上升到long类型。但请注意,自己是可以手动将int类型转换为long类型这样更清晰。

截尾和舍入

在执行窄化转换时,必须注意截尾和舍入问题。例如一个浮点型转为整形值,如39.7转化为int,是40还是39
答案是39,java总是在执行窄化时截尾
如果需要答案为40则需要使用java.lang.Math中的round()方法,此方法也叫舍入,:

提升

对于基本数据类型执行算数运算或按位运算,大家会发现,小的数据类型与大的数据类型相运算会提升为大的类型,比如int和long类型相加,结果类型为long

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值