【Java】基础09:运算符
加减乘除,这是我们小学就学过的数学运算。
那么在程序里又有哪些运算呢?
一、算数运算符
- 加法运算:+(若是字符串连接运算)
- 减法运算:-
- 乘法运算:*
- 除法运算:/
- 取模运算:%(两个数字相除取余数)
- 自增自减运算:++、--
这些加减乘除取模其实就和小学数学学到的功能是差不多的。
昨天的学习中做过测试:
知道了byte、short、char类型,它们在运算时会自动转换为int。
那如果是int和double类型的呢?
测试:
double d=100;
int i=10;
// int i2=d1+i1;//错误: 不兼容的类型: 从double转换到int可能会有损失
double i2=d1+i1;
从中我们就能看到,一个int类型的数和一个double类型的数相加时,会变成double类型。
当算术运算两侧的类型不一致的时候,结果和大类型保持一致
。
++、-- 运算符
++运算,变量自增长1;--运算,变量自减少1。
那么如果有一个变量i,++i和i++有什么区别呢?
独立运算时:i++和++i没有区别,都是实现自动加1的功能
混合运算时:i++和++i就不同了
1.++/--在先,先运算后取值
int i1 = 1;
int i2 = ++i1;
System.out.println(i1);//计算结果是2
System.out.println(i2);//计算结果是2
2.++/--在后,后运算先取值
int i1 = 1;
int i2 = i1++;//这就等价于 int i2=i1;
//i1=i1+1;
System.out.println(i1);//计算结果是2
System.out.println(i2);//计算结果是1
后++/--时,就相当于变量i1先把值赋给i2,再自增1;
字符串之间进行+运算时,是拼接操作
为何得出的结果是1+1=11?
因为“1+1=”这是一个字符串,它在与后面的1运算时是拼接运算的。
那如何让其显示出正确的答案呢?
用括号提高后面1+1的运算优先级就好了。
二、赋值运算符
- 等于号:=(用于给变量赋值)
- 加等于:+=
- 减等于:-=
- 乘等于:*=
- 除等于:/=
- 取模等于:%=
+= ,-=,*=,/=,%=:
运算符和赋值符的结合使用,变量自身参与运算,结果赋值返回给自身
int i=10;
i1=i+10;//这行就可以写成i+=10,
System.out.println(i);
+= ,-=,*=,/=,%=:自动类型强转功能
赋值运算符在运算过程中,若是涉及到值强转,会自动操作
byte b=1;
b+=256;//可以理解成byte b = (byte)257
System.out.println(b)//所以值为1而不是257,int类型被强转成byte了
int i=10;
i+=3.14;//可以理解成int i =(int)13.14
System.out.println(i)//所以值为13而不是13.14,double类型被强转了
三、比较运算符
- 等等于:==(如果判断正确结果为true)
- 小于号:<
- 大于号:>
- 小于等于:<=
- 大于等于:>=
- 不等于:!=
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true或者false
public static void main(String[] args) {
System.out.println(1==1);//true
System.out.println(1<2);//true
System.out.println(3>4);//false
System.out.println(3<=4);//true
System.out.println(3>=4);//false
System.out.println(3!=4);//true
}
四、逻辑运算符
- 双与:&&(全真才是真)
- 单与:&(全真才是真)
- 双或:||(全假才是假)
- 单或:|(全假才是假)
- 取反:!
其实也就是数学里面学到的逻辑运算:与、或、非
//逻辑与&&(并且) 一假即假,全真才是真
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false,右边不计算
//逻辑或||(或者)一真即真,全假才是假
System.out.println(false || false);//falase
System.out.println(false || true);//true
System.out.println(true || false);//true,右边不计算
//逻辑非!(不是)
System.out.println(!false);//true
那么&&与&有何区别呢?
做个测试:
小结:
- 双与:一假即假,若前面为假,后面不用运算
- 单与:一假即假,无论结果是啥,都会运算完
- 双或:一真即真,若前面为真,后面不用运算
- 但或,一真即真,无论结果是啥,都会运算完
五、三元运算符
我们都接触过考试,一般都是60分及格。
也就是说分数大于或等于60时,及格;分数小于60时,不及格。
这种在生活中常见的情况在程序里是如何表现的的?
这就需要三元运算符了。
当一个布尔表达式的结果分别对应两种情况时,可以使用三元表达式。
总结
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- keras 自定义loss model.add_loss的使用详解
- keras做CNN的训练误差loss的下降操作
- Python基于yaml文件配置logging日志过程解析
- Python ckeditor富文本编辑器代码实例解析
- PHP自定义错误处理的方法分析
- PHP聊天室简单实现方法详解
- phpStorm+XDebug+chrome 配置详解
- PHP面向对象程序设计之多态性的应用示例
- PHP设计模式之单例模式定义与用法分析
- PHP面向对象程序设计之接口的继承定义与用法详解
- PHP简单验证码功能机制实例详解
- php高清晰度无损图片压缩功能的实现代码
- Python自省及反射原理实例详解
- 浅谈django框架集成swagger以及自定义参数问题
- keras CNN卷积核可视化,热度图教程