您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java这些运算规则和注意事项你确定都知道吗?

时间:2019-08-22 17:28:20  来源:  作者:

声明:本文由牛旦教育原创,头条首发,所有权保留,转载注明来源。

JAVA编程中,最开始学习的应该计算程序,应该就是算术运算了。Java中算术运算符号有很多,包括加减乘除(+-*/)和取模(%)与它们的复合运算(+=、-=、*=、/=)以及自增自减(++、--)操作,还有正负运算(+、-)这些都是算术运算的操作符。作为数学中的算术运算符存在,它只能对数字类型的值进行运算,也就是只能对byte,short,char,int,long,float或double类型之一。而且在做具体运算时,它们是有规则要遵循的。

Java大拿们,这些运算规则和注意事项你确定都知道吗?

 

1.算术运算规则

具体在做算术运算时,Java程序中做算术运算的操作符所操作的两个操作数看作一个表达式,而表达式的数据类型根据四条规则之一确定:

1) 如果其中一个操作数为double,则另一个操作数转换为double,整个表达式的类型为double。

否则:

2) 如果其中一个操作数为float,则另一个操作数转换为float,整个表达式的类型为float。

要不然,

3) 如果其中一个操作数为long,另一个操作数转换为long,整个表达式的类型为long。

要不然,

4) 如果前三条规则都不适用,则所有操作数都转换为int,前提是操作数不是int类型的,但整个表达式的类型为int。比如

byte b1,b2=2,b3=3;
b1=5;//正确
b1=b2+b3;//编译出错。

之所以出错,就是本条规则起作用的原因(把int型赋值给byte型,不兼容)。

总结来说,操作数的数据类型转换和涉及加法运算符的表达式类型判定的最终结语:

var = operand1 + operand2;

如果操作数1和操作数2是编译时常量,操作数1操作数2的结果将确定此赋值是否有效。 如果操作数1操作数2的结果在变量var的数据类型的范围内,则表达式将被编译。 否则,会生成编译器错误。 如果操作数1或操作数2是一个变量(即无法在编译时确定操作数1或操作数2的值),则表达式的数据类型根据上面讨论的四个规则之一来确定

2. 规则外注意项

第一点:加号+可在字符串中使用,以拼接两个字符串或两个操作数,形成新的字符串;

第二点:作为拼接字符串操作符用时,一个或多个操作数中,必须有一个是字符串(包括空字符串),其它的操作数可以为基本类型和引用类型;

第三点:Java中除法有整数除法和浮点(带小数点)除法两种,且除数不能为0。对于整数除法,结果只能是整数,即将结果取整,忽略小数。如8/5,结果为1;对于浮点除法,则执行浮点除法并且结果不会被截断,但注意类型转换问题;

第四点:取模运算的规则,分两种情况——

1)当两个操作数都为整数数时,遵守下列规则计算结果:

规则#1:如果右侧操作数为零,则会出现运行时错误; 例如,

	int num ;
	num = 15%0; //运行时错误

规则#2:如果右侧操作数不为零,则结果的符号与左侧操作数的符号相同;例如,

	num = -15 % 6; // 把-3赋给num
	num = 15 % -6; // 把3赋给num 
	num = -15 % -6; // 结果为 -3,因为左边操作数为-15, 负数

2)当模数运算符的任一操作数是浮点数,遵循以下规则计算结果:

规则#1:即使右边的操作数是一个浮点零,该操作也不会导致错误。

规则#2:如果任一操作数是NaN,结果是NaN。NaN代表"不是数字"。NaN是算术运算的结果,它不具有有意义的结果,例如将零除零、负数的平方根、将无穷大加到无穷大等等。有两类NaN,可以通过Float.NaN或Double.NaN来使用一个NaN参与运算。

规则#3:如果右侧操作数为零,则结果为NaN。例如,

	float f1;
	f1 = 15.0F % 0.0F; // 把Float.NaN 赋给 f1

规则#4:如果左边的操作数是无穷大,结果是NaN。 例如

	float f1;
	f1 = Float.POSITIVE_INFINITY % 2.1F; // 把Float.NaN 赋给f1

规则#5:如果前面的规则都不适用,模数运算符将返回左侧操作数和右侧操作数的除法余数。结果的符号与左侧操作数的符号相同。例如,

	float f1;
	double d1;
	f1 = 15.5F % 6.5F; // 把 2.5F赋给 f1
	d1 = 5.5 % 15.65; // 把5.5赋给 d1
	d1 = 0.0 % 3.78; // 把0.0 赋给d1
	d1 = 85.0 % Double.POSITIVE_INFINITY; // 把85.0赋给d1

第五点:一元运算符(+和-)。操作数必须是基本的数字类型。 如果操作数是byte,short或char,则将其提升为int,主要用于标识数的正负。

就写这些了,有收获吧?点个赞,分享出去吧^_^



Tags:Java运算规则   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Java编程中,最开始学习的应该计算程序,应该就是算术运算了。Java中算术运算符号有很多,包括加减乘除(+-*/)和取模(%)与它们的复合运算(+=、-=、*=、/=)以及自增自减(++、--)操作,还有正负运算(+、-)这些都是算术运算的操作符。...【详细内容】
2019-08-22  Tags: Java运算规则  点击:(263)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(12)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条