Java编程逻辑—基本运算

有了初始值之后,就可以对数据进行运算。运算有不同的类型,不同的数据类型支持的运算也不一样,本篇文章将介绍Java中基本类型数据的主要运算。

·算术运算:主要是日常的加减乘除。

·比较运算:主要是日常的大小比较。

·逻辑运算:针对布尔值进行运算。

一、算术运算

算术运算符有加、减、乘、除,符号分别是+、-、*、/,另外还有取模运算符%,以及自增(++)和自减(--)运算符。取模运算适用于整数和字符类型,其他算术运算适用于所有数值类型和字符类型。大部分运算都符合我们的数学常识。

减号(-)通常用于两个数相减,但也可以放在一个数前面,例如-a,这表示改变a的符号,原来的正数会变为负数,原来的负数会变为正数,这也是符合我们常识的。

取模(%)就是数学中的求余数,例如,5%3是2,10%5是0。

自增(++)和自减(--),是一种快捷方式,是对自己进行加1或减1操作。

加、减、乘、除大部分情况和数学运算是一样的,都很容易理解,但有一些需要注意的地方,而自增、自减稍微复杂一些,下面我们解释下。

1.加、减、乘、除注意事项

运算时要注意结果的范围,使用恰当的数据类型。两个正数都可以用int表示,但相乘的结果可能就会超出,超出后结果会令人困惑

int a = 2147483647*2; //2147483647是int能表示的最大值

a的结果是-2。为什么是-2我们暂不解释,要避免这种情况,我们的结果类型应使用long,但只改为long也是不够的,因为运算还是默认按照int类型进行,需要将至少一个数据表示为long形式,即在后面加L或l,下面这样才会出现期望的结果:long a = 2147483647*2L

另外,需要注意的是,整数相除不是四舍五入,而是直接舍去小数位

例如: double d = 10/4;

结果是2而不是2.5,如果要按小数进行运算,需要将至少一个数表示为小数形式,或者使用强制类型转化,即在数字前面加(double),表示将数字看作double类型,如下所示任意一种形式都可以:a) double d = 10/4.0;

b) double d = 10/(double)4;

2.小数计算结果不精确

无论是使用float还是double,进行运算时都会出现一些非常令人困惑的现象,比如:

float f = 0.1f*0.1f; System.out.println(f);

这个结果看上去应该是0.01,但实际上,屏幕输出却是0.010000001,后面多了个1。换用double看看:

double d = 0.1*0.1;

System.out.println(d);

屏幕输出0.010000000000000002,一连串的0之后多了个2,结果也不精确。

这是怎么回事?看上去这么简单的运算,计算机计算的结果怎么不精确呢?但事实就是这样,究其原因,我们需要理解float和double的二进制表示。

3.自增(++)/自减(--)

自增/自减是对自己做加1或减1操作,但每个都有两种形式,一种是放在变量后,例如a++、a--,另一种是放在变量前,例如++a、--a。

如果只是对自己操作,这两种形式也没什么差别,区别在于还有其他操作的时候。放在变量后(a++)是先用原来的值进行其他操作,然后再对自己做修改,而放在变量前(++a)是先对自己做修改,再用修改后的值进行其他操作。自增/自减是“快捷”操作,是让程序员少写代码的,但遗憾的是,由于比较奇怪的语法和诡异的行为,给初学者带来了一些困惑

二、比较运算

比较运算就是计算两个值之间的关系,结果是一个布尔类型(boolean)的值。比较运算适用于所有数值类型和字符类型。

比较操作符有大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)。

大部分也都是比较直观的,需要注意的是等于。首先,它使用的是两个等号==,而不是一个等号=。为什么不用一个等号呢?因为一个等号=已经被占了,表示赋值操作。另外,对于数组,==判断的是两个变量指向的是不是同一个数组,而不是两个数组的元素内容是否一样,即使两个数组的内容是一样的,但如果是两个不同的数组,==依然会返回false,比如:

int[] a = new int[] {1,2,3};

int[] b = new int[] {1,2,3};//a==b的结果是false

如果需要比较数组的内容是否一样,需要逐个比较里面存储的每个元素。

三、逻辑运算

逻辑运算根据数据的逻辑关系,生成一个布尔值true或者false。逻辑运算只可应用于boolean类型的数据,但比较运算的结果是布尔值,所以其他类型数据的比较结果可进行逻辑运算。

逻辑运算符具体有以下这些。

·与(&):两个都为true才是true,只要有一个是false就是false;

·或(|):只要有一个为true就是true,都是false才是false;

·非(!):针对一个变量,true会变成false,false会变成true;

·异或(^):两个相同为false,两个不相同为true;

·短路与(&&):和&类似,不同之处稍后解释;

·短路或(||):与|类似,不同之处稍后解释。

逻辑运算的大部分都是比较直观的,需要注意的是&和&&,以及|和||的区别。如果只是进行逻辑运算,它们也都是相同的,区别在于同时有其他操作的情况下,例如:

boolean a = true;

int b = 0;

boolean flag = a | b++>0;

因为a为true,所以flag也为true,但b的结果为1,因为|后面的式子也会进行运算,即使只看a已经知道flag的结果,还是会进行后面的运算。而||则不同,如果最后一句的代码是:

boolean flag = a || b++>0;

则b的值还是0,因为||会“短路”,即在看到||前面部分就可以判定结果的情况下,忽略||后面的运算。

四、总结

Java中基本类型数据的主要运算,包括算术运算、比较运算和逻辑运算。

一个稍微复杂的运算可能会涉及多个变量和多种运算,那哪个先算,哪个后算呢?程序语言规定了不同运算符的优先级,有的会先算,有的会后算,大部分情况下,这个优先级与我们的常识理解是相符的。但在一些复杂情况下,我们可能会搞不明白其运算顺序。但这个我们不用太操心,可以使用括号()来表达我们想要的顺序,括号里的会先进行运算。简单来说,不确定顺序的时候,就使用括号。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容