要点提示:Java 针对整數和浮点數有六种数值类型,以及 +、-、*、 /、和X 等操作符。
每个数据类型都有它的取值范围。编译器会根据每个变量或常量的数据类型为其分配内 存空间。Java 为数值、字符值和布尔值数据提供了八种基本数据类型。本节介绍数值数据类 型和操作符。
类型名 | 范围 | 储存大小 |
byte | -2^7 (-128 ) ~ 2^7-1 ( 127) | 8位带符号数 |
short | -2^15 (-32768 ) ~ 2^15-1 ( 32767 ) | 16位带符号数 |
int | -2^31 (-2147483648) ~ 2^31-1 (2147483647) | 32位带符号数 |
long | -2^63 ~ 2^63-1 -9223372036854775808 ~ 9223372036854775808 |
64位带符号数 |
float | 负数范围: -3.4028235E+38 -1.4E-45 正数范围:1.4E-45 ~ 3.4028235E+38 |
32位带符号数 |
double | 负数范围: -107976931348623157E+308 ~ -4.9E-324 正数范围:4.9E-324 ~ -1.7976931348623157E+308 |
64位带符号数 |
注意:IEEE 754 是美国电气电子工程师协会通过的一个标准,用于在计算机上表示浮点 数。该标准已被广泛采用。Java 采用 32 位旧EE 754 表示 float 型,64 位 IEEE 754 表示 double 型。IEEE 754 标准还定义了一些特殊浮点值,这些值都在附录 E 中列出。
Java 使用四种类型的整数:byte、short、int 和 long。应该为变量选择最适合的数据 类型。例如:如果知道存储在变量中的整数是在字节范围内,将该变量声明为 byte 型。为 了简单和一致性,我们在本书的大部分内容中都使用int 来表示整数。 Java 使用两种类型的浮点数:float 和 double。double 型是 float 型的两倍。所以, double 型又称为双精度 (doubleprecision), 而 float 称为单精度 (single precision)。通常情 况下,应该使用 double 型,因为它比 float 型更精确。
你知道如何使用 Scanner 类中的 nextDoubleO 方法来从键盘读取一个 double 数值。你也可以使 用列在表 2-2 中的方法来读取 byte、short、int、 long以及 float 类型的数值。
方法 | 描述 |
nextByte() | 读取一个 byte 类型的整数 |
nextShort() | 读取一个 short 类型的整数 |
nextlnt() | 读取一个int 类型的整数 |
nextLong() | 读取一个Long 类型的整数 |
nextFloat() | 读取一个Float类型的整数 |
nextDouble() | 读取一个Double类型的整数 |
下面是从键盘上读取各种类型数值的例子:
Scanner input = new Scanner(System.in);
System.out.print("Enter a byte value:");
byte byteValue = input.nextByte();
System.out.print("Enter a short value:");
short shortValue = input.nextShort();
System.out.print("Enter an int value: M);
int intValue = input.nextlnt();
System.out.print("Enter a long value: ");
long longValue = input.nextLong();
System.out.printf'Enter a float value: ");
float floatValue = input.nextFIoat();
如果你输人了一个不正确范围或者格式的值,将产生一个运行时错误。比如,为第 3 行 你输人了 128, 将产生一个错误,因为 128 已经超过了一个 byte 类型整数的范围。
数值数据类型的操作符包括标准的算术操作符:加号(+)、减号(-)、乘号(*)、除号(/)和求余号 (X),如下表 所示。操作数是被操作符操作的值。
运算符 | 名字 | 示例 | 运算结果 |
+ | 加 | 1+2 | 3 |
- | 减 | 32-3 | 29 |
* | 乘 | 3*6 | 18 |
/ | 除 | 6/2 | 3 |
% | 求余 | 32%3 | 2 |
要点提示:自增操作符(++) 和自减操作符(--) 是对变量进行加 1 和减 1 的操作。
++和--是对变量进行自增1和自减1的简写操作符。由于这是许多编程任务中经常需要改变的值 ,所以这两个操作符使用起来很方便。例如,下面的代码是对 i 自增1, 而对 j 自减 1。
int i=3,j=3;
i++; // i becomes 4
j-- // j becomes 2
i++读为 i 加 加, 读 为 i 减减。这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面。这些操作符也可以放在变量前面,比如
int i=3,j=3;
++i; // i becomes 4
--j // j becomes 2
++i将 i 增加1,-j 将; j 减去1。这些操作符称为前置自增操作符和前置自减操作符。
如你所见,前面的例子中, 和 ++i 的效果,或者 i--和--i 的效果是一样的。然而, 当用在表达式中不单纯只进行自增和自减时,它们就会产生不同的效果。表 2-5 描述了它们 的不同,并且给出了示例
下面是展示前置形式的++(或者 ~) 和后置形式的++(或者--)的补充示例。考虑 以下代码:
int i = 10;
int newNum = 10*i++;
System.out.print("i is" + i + ",newNum);
i is 11, newNum is 100 |
效果等同于:
int newNum = 10 * i ; i = i + 1 ; |
在此例中,首先对i 自增1, 然后返回i 的旧值来参与乘法运算。这样,newNum 的值就 成为 100。如果如下所示将 i++ 换为 ++i:
int i = 10 ;
int newNum = 10 * (++i) ;
System.out.print("i is " + i + ",newNum is " + nuwNum);
i is 11 , nuwNum is 110 |
效果等同于:
i = i + 1 ; int newNum = 10 * i ; |
i 自增1, 然后返回i 的新值,并参与乘法运算。这样,newNum 的值就成为 110。
下面是另一个例子:
double x = 1.0;
double y = 5.0;
double z = x-- + (++y);
在这三行程序执行完之后, y 的值为 6.0, i的值为 7.0, 而 X 的值为 0.0。
提示:使用自增操作符和自减操作符可以使表达式更加简短,但也会使它们比较复杂且难 以读懂。应该避免在同一个表达式中使用这些操作符修改多个变量或多次修改同一个变 量,如:int k= ++i + i。
当除法的操作数都是整数时,除法的结果就是整数,小数部分被舍去。例如:5/2 的结 果是 2 而不是 2. 5,而-5/2 的结果是-2 而不是-2. 5。为了实现浮点数的除法,其中一个操 作数必须是浮点数。例如:5.0/2 的结果是 2.5。
操作符*, 被称为求余或者取模操作符,可以求得除法的余数。左边的操作数是被除 数,右边的操作数是除数。因此,7%3 的结果是1, 3%7 的结果是 3, 12%4 的结果是 0, 26%8 的结果是 2, 20%13的结果是 7
操作符 % 通常用在正整数上,实际上,它也可用于负整数和浮点值。只有当被除数是负 数时,余数才是负的。例如:-7%3 结果是-1,-12%4 结果是 0,-26%-8结果是-2, 20%-13 结果是 7。
在程序设计中余数是非常有用的。例如:偶数%2 的结果总是 0, 而正奇数 %2 的结果总是 1。所以,可以利用这一特性来判定一个数是偶数还是奇数。如果今天是星期六, 7天之后 就又会是星期六。假设你和你的朋友计划10 天之后见面,那么10天之后是星期几呢?使用 下面的表达式你就能够发现那天是星期二:
以下计算以秒为单位的时间量所包含的分钟数和余下的秒数。例如,500 秒就是 8 分钟 20 秒。
1 import java.util.Scanner;
2 3 public class DisplayTime{
4 public static void main(String[]args){
5 Scanner input 麵 new Scanner(System.in) ;
6 // Prompt the user for input
7 System.out.print( "Enter an integer for seconds:
8 int seconds 二 input.nextlntO;
9
10 int minutes = seconds / 60; // Find minutes in seconds
11 int remainingSeconds = seconds% 60; // Seconds remaining
12 System.out.println(seconds + • • seconds is •’ + minutes + ' • minutes and " + remainingSeconds + " seconds"):
13 }
14 }
nextlnt() 方法(第 8 行)读取 seconds的整数值。第 10行使用 seconds/60获取分钟 数。第11行(seconds%60) 获取在减去分钟数之后得到的剩余秒数。 操作符 + 和-可以是一元的也可以是二元的。一元操作符仅有一个操作数;而二元操作 符有两个操作数。例如,在-5中,负号(-)可以认为是一元操作符,是对正数 5 取负数值, 而在表达式 4-5中,负号(-)是二元操作符,是从 4 中减去 5。
使用方法 Math.pow(a,b)来计算 a^b。pow 方法定义在 Java API的 Math 类中。运用语法 Math.pow(a.b)可以调用(比如,Math.pow(2,3))该方法,并将返回结果a^b(2^3)。这里,a 和 b 是 pow 方法的参数,而数值 2 和 3 是调用方法时的真实值。
比如:
System.out.println(Math.pow(2,3));// Displays 8.0
System.out.println(Math.pow(4, 0.5));// Displays 2.0
System.out.println(Math.pow(2.5, 2));// Displays 6.25 System.out.println(Math.pow(2.5,-2));// Displays 0.16