关于Java中转换机制整理

关于Java中转换机制整理

这两天在会看think in java, 顺便整理一些东西;

下面是最基本的数据类型比较:

说明几点:
1 . 也可以分为两大类:boolean类型和数值类型(主要为了数据转换时用)

  • 注意boolean不能与其他类型转换,把boolean赋予一个int等类型是不可以的

2 . String字符串并不是基本数据类型,字符串是一个类,就是说是一个引用数据类型。
3 . 若还需要用更高精度的浮点数,可以考虑使用BigDecimal类。
4 . Java提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。
5 . 例如使用一个正浮点数除以0将得到正无穷大(POSITIVE_INFINITY);负浮点数除以0得到负无穷大(NEGATIVE_INFINITY)。0.0除以0.0或对一个负数开方得到一个非数(NaN)。(都属于Double或Float包装类)
6 . 所有正无穷大数值相等,所有负无穷大数值都是相等;而NaN不与任何数值相等。

1.基本数值型类型的自动类型转换

这种很好理解,就是在基本类型中(boolean除外),可以系统自动转换把范围小的直接赋予范围大的变量。

  • 一般是实行如下转换,不用特别标记:
1
2
3
4
5
6
7
8
9
10
11
public class AutoConversion {
public static void main(String[] args) {
int a = 6;
float f = a;//int可以自动转为float

byte b = 9;
char c = b;//出错,byte不能转为char型
double d = b;//byte 可以转为double

}
}

PS:有一种比较特殊的自动类型转换,就是把基本类型(boolean也行)和一个空字符连接起来,可以形成对应的字符串。

1
2
3
4
5
6
7
public class Conversion {
public static void main(String[] args) {
boolean b = true;
String str = b + "";
System.out.print(str);//这里输出true
}
}

2.强制类型转化

上面的自动类型只能把表数范围小的数值转化为大的,如果没有显性表示把大的转为小的,会发生编译错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Conversion {
public static void main(String[] args) {
int b = 233;
byte c = (byte)b;//强制把一个int转为byte类型
System.out.println(c);//输出-23

float a = 5.6;//错误,因为5.6默认是double类型
float a = (float)5.6;//正确,要进行强制转化

double d = 3.98;
int e = (int)d;//强制把一个double转为int类型
System.out.println(e);//输出3
}
}

像上面一样,要执行表数大的范围转为小的,需要显性声明,若强制转化后数值过大,会造成精度丢失。

3.字符串(String)转换为基本类型

  • 通常情况下,字符串不能直接转换为基本类型,但通过基本类型对应的包装类可以实现。
  • 每个包装类都会有提供一个parseXxx(String str)静态方法来用于字符串转换为基本类型
1
2
3
4
5
Sting a = "45";
//使用Integer的方法将一个字符串转换为int类型
int iValue = Interger.parseInt(a);
//boolean比较特殊,仅在字符串为true的情况下为true,其他为false
boolean b = Boolean.valueOf(a);

4.将基本类型转换为字符串(String)

每个包装类都带有一个toString的方法,比如Double.toString(double d)等,可以转换为String字符串。

5.基本数据类型和包装类的转换

基本数据类型 包装类
boolean Boolean
char Character
byte Byte
short Short
integer Integer
long Long
float Float
double Double
  • 下面示例两者之间的互相转换
1
2
3
int i = 1;
Integer iWrap = new Integer(i);//包装
int unWrap = iWrap.intValue();//解包装
hyhcoder wechat
扫码关注我的个人订阅号