java基础学习:2、基本表达式

一、算术运算符

①加法:+ 减法:- 乘法:* 除法:/ 取余数:%
②+=:a+=b等价于a=a+b;
-=:a-=b等价于a=a-b;
=:a=b等价于a=a*b;
/=:a/=b等价于a=a/b;
%=:a%=b等价于a=a%b;
③一元运算符:
如果运算符放在操作数之前(前缀模式),变量的递增或递减操作将在更新后的变量值被用于任何由它构成的赋值操作之前执行。
例如:a=1;
b=++a;
分析:上述代码执行后,变量a的值是2,变量b的值也是2。这是因为在第二行中变量a的递增(从1到2)发生在它的值赋给b之前。因此这行代码b=++a;在逻辑上等价于下面两行代码:
a=a+1;
b=a;
如果运算符放在操作数之后(后缀模式),递增或递减操作发生在原来的变量值被用于任何由它构成的赋值操作之后。
例如:a=1;
b=a++;
分析:上述代码执行后,变量b的值是1,而变量a的值是2。这是因为在第二行中变量a的递增(从1到2)发生在它的值赋给b之后。因此这行代码b=a++;在逻辑上等价于下面两行代码:
b=a;
a=a+1;
二、关系和逻辑运算符

等于:== 不等于:!= 大于:> 小于:<
大于等于:>= 小于等于:<=
与:& 或:| 异或:^
逻辑与:&& 逻辑或:|| 逻辑非:!

三、三元表达式
布尔表达式?a:b
布尔表达式为true结果为a,表达式为false结果为b。
java三元表达式有字符强转的功能,会把后面的强转为和前面的类型一样:

当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:

1.若果两个操作数不可转换,则不做转换,返回值为Object类型。

2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。

3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。

4.若两个操作数字都是直接数字。则返回值类型为范围较大者。
例1:
public class yunsuanfu {
public static void main(String[] args) {
int a = 5;
System.out.println("value is "+((a<5) ? 10.9 : 9));
}
}
分析:注意下“((a<5) ? 10.9 : 9)”,里面有一个10.9,而后面跟了一个9,这是java就会根据运算符的精确度类型进行自动类型转换,由于前面有一个10.9,所以后面的9会被转换成9.0,所以输出的是9.0.
例2:
char x='x';
int i =10;
System.out.println(false ? i : x);
System.out.println(false ? 10 : x);
}
输出结果是:120 x
int i=10;中i是一个int型变量,所以第一个输出x被强制转换成int型了,应为i是int类型,x的值转换成int值是120,所以第一个输出120。

至于第二个输出,java规范中提到,当后两个表达式有一个是常量表达式(上面指10),另外一个类型是T(上面指char)时,而常量表达式可以被T表示时,输出结果是T类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,874评论 1 10
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 不需要多么华丽的语言,多么华丽的文字,现在的生活是为了生存,不似以往无忧无虑。没有了,也不能伸手去要的钱,花着自己...
    差的远呢阅读 160评论 0 0
  • 网络库的介绍 1.HttpURLConnection API简单,体积较小,因而非常适用于Android项目,但是...
    黑石ZB阅读 619评论 0 11
  • RHEL7是一个集合多款防火墙管理工具并存的系统,Firewalld动态防火墙管理器服务(Dynamic Fire...
    G木头人阅读 654评论 0 0