前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA程序第一期

JAVA程序第一期

作者头像
一头小山猪
发布2020-06-15 17:38:22
3360
发布2020-06-15 17:38:22
举报
文章被收录于专栏:微光点亮星辰

大家好,因为小编转去做大数据了,所以告别java之前最后把1200例刷一遍,对于里面一些实用的例子呢,会不定期的给大家分享,也希望大家在留言板提一些在工作中经常遇到的小问题,小编可以一并整理。

那么第一发,在电商项目中,经常会遇到计算问题,So,如果两个double类型的变量相减会发生什么呢?

比如:

double money = 2;

double price = 1.1;

结果是?0.9?不要天真,正确答案是0.8999999999999999,有人会说,我知道,可以用保留小数位数解决,DecimalFormat么。。但是我们要知道导致这个结果的原因是不精确,对于一个不精确结果的进位很可能不能保证得到的是正确结果。在计算机中所有数字都是使用二进制进行存储的,所以无法精确地表示所有的小数。既然我们知道DecimalFormat,为什么不直接用BigDecimal呢,该类在math包下,可以进行精确计算,但是在写程序的时候要注意一个问题,在实例化的时候一定要使用数字字符串作为参数,而不能使用已经初始化的浮点类型变量,这样接收到的参数也是经过二进制存储的浮点数。那么看下面的例子:

第二发,可以算是经典面试题,实现两个变量的互换。

What?这也算是面试题,用中间变量好不。。。但是题目后半句是:不借助第三个变量。有人会说,我知道,python中直接(a,b)=(b,a)就搞定啦,机智如你。。。但是,在java中要怎么实现呢?除了面试题的需求,在程序运行过程中,新增加一个变量就会增加系统资源的消耗,从这个思想出发,我们可以去优化很多细节,这也是一个中级程序员至少应该具备的。

首先,我们需要借助的是异或运算符,先脑补一下异或运算的概念吧。简单的说如果两个变量的值不同,运算结果为1,如果两个变量的值相同,运算的结果为0。当然,这是在二进制下的运算,那么十进制数在进行异或运算的过程中也是转换为2进制数进行运算的,中间结果并不重要,重点是交换!没错,交换,为什么异或可以实现两个数字的交换呢,因为他有一个很重要性质:

同一变量与另一变量和其异或值异或等于自身。。。小编一开始也没看懂,帮大家断一下句:同一变量,与另一变量和该变量异或值,异或,等于自身,吃瓜群众说:你断句之后我更晕了。。。

好吧,其实可以举一个例子的,也就是说B ^ A ^ B = A,这里的同一变量就是B,另一变量是A,那么自己消化消化吧,为了方便大家理解,小编把每一步都做了输出,但是其实,中间过程并不重要。

好了,大家如果有什么疑问欢迎积极留言。欢迎大家积极来稿,和大家共同交流,谢谢大家长久以来的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微光点亮星辰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档