当前位置: 首页 > news >正文

什么是Java运算?Java运算好学吗?

提到运算,你可能会立即想到加、减、乘、除四则运算以及“九九乘法表”。Java 语言中有很多进行数据运算的方式,比如:算术运算、比较运算、逻辑运算、赋值运算、三目运算等。每一种运算方式,又都包含了很多的运算符,小编把这些运算符形象的称为“十八般武艺”,学习 Java 中的运算,就是学习这些运算符的使用,也就是修炼这“十八般武艺”的过程。


 

public class Test{
   public static void main(String[] args) {
       int number = 1 + 2; // 使用加号(+)将常量1和2连接起来,构成了一个加法表达式,并把运算结果赋值给变量number
       System.out.println(number); // 输出number的值
  }
}

上面的式子就是使用运算符加号(+)将常量 1 和 2 连接起来,构成了一个加法表达式,并把运算结果赋值给变量 number,不出意外的话,打印结果应该是:

public class Test{
   public static void main(String[] args) {
       int number = 1 + 2; // 使用加号(+)将常量1和2连接起来,构成了一个加法表达式,并把运算结果赋值给变量number
       System.out.println(number); // 输出number的值
       int count = number + 10; // 变量和常量同时参与运算
       System.out.println(count); // 输出计算结果
  }
}

打印结果:

13

除此之外,运算的方式也有很多,加法、减法、取余(取模)、比较运算等等,但它们都有一个共同的特点:每个表达式都会有一个运算结果。我们根据表达式运算结果的数据类型,将表达式的类型进行归纳分类,比如:

整型表达式:运算结果为整数。比如: 1 + 2、10 * 20、5 - 3,它们的运算结果都是整数
浮点型表达式:运算结果为浮点数。比如:3.14 * 2、0.618 + 0.382、3.0 / 1,它们的运算结果都是浮点数
布尔型表达式:运算结果为布尔类型的值。比如:2 > 1、(20-10) < 15,它们的运算结果都是布尔型:要么true、要么false。
练好了运算符、表达式的基本功,现在,我们可以开始学习真正的武艺了。

算术运算

先来几个简单的招式,好好复习我们小学时期的算术运算。Java 中的算术运算符【大概、也许】有七种:

前面四个运算符还算常见:+、 -、 *、 / ,虽然乘号(*)和除号(/)跟我们以前见到的长得不一样,但并不难理解。百分号(%)在这里是“取余”、“取余”的意思,也就是说,使用百分号(%)可以得到数字 7 除以 3 之后的余数:1。而 ++ 和 -- 就比较陌生了,它们分别代表数据 “自增1” 和 “自减1”,这种运算是我们以前没见过的,接下来,我手把手教你每个招式——运算符的用法。

1、加、减、乘、除

四则运算的用法,代码如下:

public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
       // 1.加法运算
       int add = num1 + num2;
       // 2.减法运算
       int subtract = num2 - num1;
       // 3.乘法运算
       int multiply = num2 * num3;
       // 4.除法运算
       int divide = num4 / num3;
       // 分别输出运算结果
       System.out.println(add); // 输出加法计算结果
       System.out.println(subtract); // 输出减法计算结果
       System.out.println(multiply); // 输出乘法计算结果
       System.out.println(divide); // 输出除法计算结果
  }
}

输出结果:

7
1
20
2

除法运算有个细节要注意:如果相除的两个数进行运算,除不尽怎么办?猜想一下,下面这个行代码会得到什么结果:

System.out.println(7 / 3); // 即 7 / 3,结果是什么,2.333...还是2,还是1

看结果:

public class Test{
  public static void main(String[] args) {
  System.out.println(7 / 3);
  }
}

切记一点:除法运算符( / ),得到两个数据相除的商,在 Java 语言中,整数除以整数结果还是整数,如果除不尽,会舍弃余数。也就是说,7 / 3 的商是2,余数为1,因为参与运算的被除数、除数都是整数(int类型),所以计算结果还是整数,舍弃了余数部分,结果是2。

是不是有一种恍然大悟的感觉。这是 Java 中的运算与我们以前的认知第一个不一样的地方。

2、取模、自增(++)和自减(--)

再教你三个进阶招式(%、 ++、 --):

public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
       int remainder = num3 % num1; // 取模/取余运算,5对3取模,结果是?
       System.out.println(remainder); // 输出取模运算结果
       num2++; // num2自增1
       num4--; // num4自减1
       System.out.println(num2); // 输出自增之后的运算结果
       System.out.println(num4); // 输出自减之后的运算结果
  }
}

输出结果:

2
5
9

百分号(%)是取模运算,也叫取余运算,是除法运算的一种扩展,只不过除法运算得到的结果是商,而取模运算得到的结果是余数。如果两个数进行取模运算,结果是0,意味着什么?没错,这就是整除的效果,所以,取模运算(%)可以用来判断两个数是否能够整除,也就是说,被除数是除数的倍数。

加加(++)和减减(--)运算是让变量进行自增或自减。这里要注意,不能将这两个运算符直接使用到常量上,比如下面的代码是错误的:

1++; // 不允许常量自增或自减

思考一下,为什么?那是因为常量的概念,规定了它不能够被修改,所以,如果你想要获得2,那么直接使用字面值常量2就行了,完全不需要使用另一个常量进行运算。还有个细节,上面的代码,也可以把 ++ 和 -- 放到变量的前面,这样的运算结果是一样的(放在变量前、后的代码不能同时存在,否则数据会进行两次运算哦):
来,我们试试把++和--写到前面

++num2; // num2自增1
--num4; // num4自减1
public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
       int remainder = num3 % num1; // 取模/取余运算,5对3取模,结果是?
       System.out.println(remainder); // 输出取模运算结果
       // num2++; // num2自增1
// num4--; // num4自减1
++num2; // num2自增1
--num4; // num4自减1
       System.out.println(num2); // 输出自增之后的运算结果
       System.out.println(num4); // 输出自减之后的运算结果
  }
}

输出结果没有变化:

5
9

当然,加加(++)和减减(--)也可以像别的运算符那样,把结果赋值给一个新的变量,就像这样:

public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
       int num5 = num2++; // 猜想:num2自增1,然后赋值给新变量num5
int num6 = num4--; // 猜想:num4自减1,然后赋值给新变量num6
System.out.println(num5); // 输出自增之后的运算结果
System.out.println(num6); // 输出自减之后的运算结果
  }
}

输出结果:

4
10

怎么还是原来的值?难道是没有发生运算?

看来我们的猜想不正确,原来

int num5 = num2++; // 结论:num2先赋值给新变量num5,然后才进行自增运算
int num6 = num4--; // 结论:num4先赋值给新变量num6,然后才进行自减运算

我把加加(++)和减减(--)放到变量前面试试:

public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
// int num5 = num2++; // 结论:num2先赋值给新变量num5,然后才进行自增运算
// int num6 = num4--; // 结论:num4先赋值给新变量num6,然后才进行自减运算
int num5 = ++num2; // 猜想:num2自增1,然后赋值给新变量num5
int num6 = --num4; // 猜想:num4自减1,然后赋值给新变量num6
       System.out.println(num5); // 输出自增之后的运算结果
       System.out.println(num6); // 输出自减之后的运算结果
  }
}

输出结果:

5
9

终于变成正确答案了:

int num5 = ++num2; // 结论:num2自增1,然后赋值给新变量num5
int num6 = --num4; // 结论:num4自减1,然后赋值给新变量num6

但是,这是为什么呢?加加(++)和减减(--)放到变量前和放到变量后为什么结果不一样,到底数据有没有进行运算呢?剖析一下这两招:

单独使用:放在变量前或后结果一样

参与其它运算:

 在变量前,先自增(自减) ,再进行其它运算

 在变量后,先以原值进行其它运算,再自增(自减)

所以,第一次把 ++ 和 -- 放在变量后,是把变量原来的值赋值给新变量,而自增(或自减)的值被抛弃了,因此打印的是原来的值;第二次把 ++ 和 -- 放在变量前,是把运算之后的值赋值给新变量,因此打印的是计算之后的数据,这就是加加(++)和减减(--)这两个运算符的底层原理。 ++ 和 -- 是一种特殊的运算,这是再一次不同于我们以往认知的一个地方。

相关文章:

  • abaqus子程序vumat安装使用
  • 【Java项目】Minio的安装部署以及SpringBoot整合Minio
  • 架构设计第一讲:架构设计相关面试题汇总
  • LeetCode笔记:Biweekly Contest 101
  • 【python实操】马上毕业了,你还不懂什么是守护线程、线程、进程?(附12306抢票程序-源代码)
  • Springboot整合rabbitmq并实现消息可靠性和持久性
  • ChatGPT可以作为一个翻译器吗?
  • 一文学会 Spring MVC 表单标签
  • 【联邦学习(Federated Learning)】- 横向联邦学习与联邦平均FedAvg
  • 免费一键生成原创文章-原创文章批量生成
  • 众人围剿,GPT-5招惹了谁
  • Spring Boot 3.0系列【19】核心特性篇之自定义Starter启动器
  • oracle中sql 正则怎么写?
  • 【5G RRC】NR测量Gap介绍
  • 【T+】登录畅捷通T+软件后提示同一个浏览器中不允许存在用户XX同时在线。
  • 收藏网友的 源程序下载网
  • angular2 简述
  • EventListener原理
  • Git 使用集
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js 实现textarea输入字数提示
  • JS学习笔记——闭包
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • storm drpc实例
  • 初探 Vue 生命周期和钩子函数
  • 对象引论
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 理解在java “”i=i++;”所发生的事情
  • 面试总结JavaScript篇
  • 目录与文件属性:编写ls
  • 盘点那些不知名却常用的 Git 操作
  • 前端面试之闭包
  • 前言-如何学习区块链
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何合理的规划jvm性能调优
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 跳前端坑前,先看看这个!!
  • 小李飞刀:SQL题目刷起来!
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • FaaS 的简单实践
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #在 README.md 中生成项目目录结构
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (汇总)os模块以及shutil模块对文件的操作
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET MVC之AOP