3.1 java基本数据类型
3.1.1整数
整数表示没有小数的数值,允许是负数。
Java提供四种整型
int |
4B |
-2147483648~2147483647 |
short |
2B |
-32768~32767 |
long |
8B |
-9 233 372 036 854 755 808~9 223 372 036 854 775 807 |
byte |
1B |
-128~-127 |
在java中整数的取值范围与平台无关,且java保证所有的机器上的远行结果相同。
长整型数值的一个后缀L。十六进制有一个前缀0x。八进制有一个前缀是0。一般不建议使用八进制,容易混淆。
3.1.2 浮点数
浮点数用于表示小数部分的数值。
java提供两种浮点数
float 4B
double 8B
double的精度是float的两倍。但是,float只是用在需要快速处理或者存储大量的数据时适用。例如:个人的年薪可以用float表示,但是公司总裁的年薪可能就不够了。
jdk5.0中,可以用十六进制表示浮点数。例如:0.125表示为0x1.0p-3,用p表示指数。而不是用e表示。
虽然浮点数表示的数值够大,但还是会出错和溢出的情况。例如:1/0 负数开平方等等。因此,我们定义了三个常量Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY、Double.NaN来表示正无穷大、负无穷大、Not a Number。正整数/0=正无穷大,0/0=NaN。测试一个结果是不是NaN不能这样测试:
if (x==Double.NaN)
应该使用Double.isNaN方法
if (Double.isNaN(x))//
注意:浮点数不适用于禁止出现舍入误差的金融计算中。例如:System.out.println(2.0-1.1)将打印出0.899999999999,而不是0.9。出现这种问题的原因是浮点数值是采用二进制系统表示的,而在系统中无法精确的表示分数1/10。
① 需要在计算中不含有任何舍入误差,就应该使用BigDecimal类。
② 将一个类标记为strictfp ,那么这个类中的所有方法都要使用严格的浮点数计算,
③ 将一个方法标记为strictfp,那么这个方法就会使用严格的浮点数计算,
public static strictfp void main(String [] args)
3.1.3大数值BigDecimal BigInteger
java.math中包含两个很有用的类BigDecimal和BigInteger
1. BigInteger
可以处理任意长度的整数运算, 即不可变的任意精度的整数
BigInteger a=BigInteger.valueOf(100);
使用静态方法valueOf可以把普通的数值转换为大数值。
但是,大数值运算不可以使用去处符+ - * /,而是使用
BigInteger c=a.add(b); //c=a+b //BigDecimal 加法
BigInteger c=a. subtract (b); //c=a+b//BigDecimal 减法
BigInteger c=a. multiply (b); //c=a*b//BigDecimal 乘法
BigInteger c=a. divide (b); //c=a/bBigDecimal 除法
BigInteger d=c.multiply(b.add(BigInteger.valueOf(2)));//d=c*(b+2)
2. BigDecimal
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。
可以处理任意长度的浮点数运算。
BigDecimal add(BigDecimal val) //BigDecimal 加法
BigDecimal subtract (BigDecimal val) //BigDecimal 减法
BigDecimal multiply (BigDecimal val) //BigDecimal 乘法
BigDecimal divide (BigDecimal val,RoundingMode mode)
// BigDecimal 除法必须提供舍入方法 如:RoundingMode.HALE_UP就是四舍五入方式。
int compareTo(BigDecimal val)
// a.compareTo(b) 比大小。如果 a=b返回0,a>b返回正数 a<b返回负数
static BigDecimal valueOf(long x)
static BigDecimal valueOf(long x,int sacle)
//返回一个值为x或x/10scale
3.1.4 字符和字符串
1.char类型
char类型是用UTF-16编码描述的一个代码单元。如果确实有必要在程序中对UTF-16代码单元进行操作你才可以使用char类型。
2. 转义字符
3. String
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例来实现。字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们。例如:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
String g=”Hello”;
int b=g.length();//b=5
int cpCount=g.codePointCount(0,g.length()); //返回代码点数量
char first=g.charAt(0); //first is ‘H’
//---------------
int cp=g.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp)) i=+2
else i++;
//遍历一个字符串
3.3 布尔类型
boolean只有两个值 false和true,用来判断逻辑条件。而且这两个值不能与整型进行转换。