导读
本文适合Java入门,不太适合Java中高级软件工程师。
本文以《Java程序设计基础篇》第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述。
本篇文章只是这个系列中的一篇,如果你喜欢这种讲解方式,或者觉得从中能学到知识,可以关注我,以便查阅本系列其他文章。
本文是第二章的第2讲,如果想看第1讲,可以查看:
8数值数据类型和操作
Java中有多少个数值类型,它们都是什么?
一共有六种数值类型,分类归纳为:
- 整数:byte, short ,int, long
- 浮点数 : float (单精度),doubl(双精度)
大家不禁会想标准IEEE754是什么?
IEEE 754 是美国电气电子工程师协会通过的一个标准,用于在计算机上表示浮点数。该标准已被广泛采用。Java采用32位IEEE 754表示float型,64位IEEE 754表示 double 型。
都支持哪些种类的操作呢?
支持加(+),减(-),乘(*),除(/),求余(或称取模,%)
要注意的运算要点有哪些呢?
- 当除数都是整数时,除法结果是整数,小数部分舍弃。
- 对于%,只有当 被除数 是负数时,余数才是负数。
- 操作符%通常用在正整数上,它也可用于负整数和浮点值。只有当被除数是负数时,余数才是负的。
- 两个浮点数值的相等测试并不可靠。应该测试两个浮点数的差小于某个阈值,来比较他们是否接近。
例:
double x =1.0-0.1-0.1
x==0.8//可能为false
此外,使用方法Math.pow(a,b)来计算a的b次幂。
9数值型直接量
前面我们了解了变量,那么下面的代码中出现的数字是什么呢?
int i =0;
它是直接量。直接量是一个程序中直接出现的常量值。
由于0数字,所以数值型直接量。
数值型直接量的要点包括:
- 数值型直接量包括:整型直接量, 浮点型 直接量。
- Long型的整型直接量要在数字后加字母L或l。
- 二进制整型直接量以0b或0B开头,例:0B1111
- 八进制整型直接量以0开头,例:07777
- 十六进制整型直接量以0X开头,例:0XFFFF
- 浮点型直接量要在数字后加字母F或f(folat型直接量),D或d(double型直接量)
整型直接量默认是int型的,指的是什么呢?
即,如果一个数字直接出现在代码中,其后没有字母,也不任何标志开头(0b,0B,0,0X开头),那么它表达整型值。
与此相似地,浮点型直接量默认情况下是double型的。
上面那个表格中,出现了3.4028235E+38这种表示法,那么它是什么呢?
它是科学记数法,用 aX10 b 的形式表示浮点型直接量。
2_3这种写法你见过吗?
它也表示数值型直接量。为了提高可读性,Java允许在两个数字之间使用下划线来表示数值型直接量。
10表达式求值以及操作符优先级
如何对表达式进行求值运算呢?
算数我们都会,其实算数运算规则也适用于表达式求值。
我们都知道,先算乘除,再算加减,那么有多个操作符的时候怎么算呢?
这涉及到运算符优先级的问题,先计算优先级高的,乘除优先级比加减优先级高。乘与除优先级相同,加与减优先级相同。
关于操作符的优先级可以列一个总表,但由于好多操作符目前还没有接触,所以暂且不列。
11增强赋值操作符
上面列举了所有的增强赋值操作符,那么为什么要使用它呢?
看下面这个例子:
int i = 10;
i = i – 1;
这个例子很简单,首先声明int型变量i,并初始化赋值10。然后,将i减1,再将结果赋给i。那么此时i的值是9.
有没有更简洁的写法呢?
当然有,i – = 1;
不过,也没简洁多少,只是少写了个字母i而已。
12自增自减操作符
看到命名,你想到了什么吗?
对了,操作符放到变量前面就是前置操作符,放到后面就是后置操作符。
有没有发现什么规律?
前置操作符使用变化后的值,后置操作符使用变化前的值。
例如,计算++i相当于计算i=i+1;这样i当前的值是原值加1后的结果。
13数值类型转换
什么是类型转换?
将一种数据类型的值转换为另一种数据类型的操作。
为什么要转换类型?
实际应用的需要,再者就是为了合理的存储数据。
先来看几个概念:
扩宽类型:将一个小范围类型的变量转换为大范围类型的变量。
缩窄类型:将一个大范围类型的变量转换为小范围类型的变量。Java自动扩宽数据类型,缩窄类型必须执行显示转换,如果不显示转换会出现编译错误。
能给个形象的比喻吗?
形象地说,扩宽类型就好比有11个人想进能容纳10个人的屋子,缩窄类型就好比能容纳10个人的屋子只进了9个人,前者无论如何也容纳不下第11个人,后者是对资源的浪费。
例如,显示转换
float f = 5.55f;
int i = (int)f;//此时i的值是5。
如果写成:float f = 5.55;呢?
那么一定会报编译错误,因为别忘了,浮点型直接量默认情况下是double型的,double精度高于float,double转换为float属于缩窄类型。
看到左侧的红叉了码,验证了我们的判断。把鼠标方在其上面,看看具体的信息:Type mismatch: cannot convert from double to float
那么在类型转换中还应该注意点什么呢?
- 类型转换中,被转换变量不会被改变。
- 形如x1 op= x2的增强赋值表达式,执行的实际是x1=(T)(x1 op x2),T是x1的类型。
- 浮点型转换为int,小数部分会被截掉。
14常见错误
如果赋给变量的值,超过它的存储范围,会怎么样呢?
这种情形被称为溢出。超过变量所能承载的最大值、最小值算溢出。然而Java不会给出警告或者报错。产生的结果会获让人觉得奇怪。
例如,int型变量能存储的最大值是2147483647,最小值是-2147483648
若有下面的赋值表达式:
int i = 2147483647 + 1;
那么此时i的值是-2147483648
若有赋值表达式:
Int i = -2147483648 – 1;
那么此时i的值是2147483647。
每天30分钟,坚持一个月就能为Java开发打下坚实的基础!努力学习吧!