一个字节等于8位,一个字节等于256个数,-128到127

一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节

一个汉字两个字符,占用两个字节

四类八种基本数据类型

1. 整型 byte(1字节) short (2个字节) int(4个字节) long (8个字节)

2.浮点型 float(4个字节,后缀F或f) double(8个字节,后缀D或d)

3.逻辑性 boolean(八分之一个字节)

4.字符型 char(2个字节,一个字符能存储下一个中文汉字)

我们不用去死记硬背最大值和最小值,-2的n次方到2的n次方-1,这些数据类型所占位数已经存为了对应的包装类的常量,比如Double.MIN_VALUE

基本数据类型与包装类对应关系和默认值

short        Short       (short)0

int            Integer       0

long         Long          0L

char         Char          '\u0000'

float         Floa           t0.0f

double     Double       0.0d

boolean   Boolean     false

类的成员变量有默认值,局部变量没有

jdk1.5支持自动拆装箱。可以将基本数据类型转换成它的包装类

Integer a = new Integer();
a = 100;
int b = new Intger(100);

基本数据类型自动转换

byte->short , char->int->long
float->double
int ->float
long->double

小可转大,大转小会失去精度。

要点

如何将整数 int 转换成字串 String

String s = String.valueOf(a);

这个方法是静态的,直接通过String调用,可以说是完美,只是平时不习惯这样写而已,

这样的实现避免了前面两个的不足和缺点。首先来看看他内部的实现机制:

public static String valueOf(Object obj){
return (obj==null) ? "null" : obj.toString()
};

在内部就是做了为空的判断的,所以就不会报出空指针异常。

从上面的源码可以很清晰的看出null值不用担心的理由。但是,这也恰恰给了我们隐患。

我们应当注意到,当object为null 时,String.valueOf(object)的值是字符串”null”,

而不是null!!!在使用过程中切记要注意。

String s = a.toString();

在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),

所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,

必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,

通常派生类会覆盖Object里的toString()方法。

double类型数据做加和操作时会丢失精度问题处理

/加法运算/
public static double add(double m1, double m2) {
BigDecimal p1 = new BigDecimal(Double.toString(m1));
BigDecimal p2 = new BigDecimal(Double.toString(m2));
return p1.add(p2).doubleValue();
}
/减法运算/
public static double sub(double m1, double m2) {
BigDecimal p1 = new BigDecimal(Double.toString(m1));
BigDecimal p2 = new BigDecimal(Double.toString(m2));
return p1.subtract(p2).doubleValue();
}
/乘法运算/
public static double mul(double m1, double m2) {
BigDecimal p1 = new BigDecimal(Double.toString(m1));
BigDecimal p2 = new BigDecimal(Double.toString(m2));
return p1.multiply(p2).doubleValue();
}