Java数据类型的转换

数据类型转换

在前面所说的基本数据类型,除了布尔类型外,其余类型的数据是可以进行混合运算的,在运算中,如果数据类型不一致,就必须先转换成同一类型,然后才能运算,这时候就要用到类型转换。如果低级数据向高级数据看齐,那么Java就能实现自动数据类型转换,例如:byte型数据转换成in类型,float类型转换成double类型,int类型转换成double类型等。反之,则需要进行强制类型转换。转换的基本原则是:低级的转换成高级的,精度小的转换成精度大的。

4.5.1  数据类型的转换方式

数据类型的转换方式的转换方式主要可以分3种:自动类型转换、强制类型转换、包装类过渡类型转换。其中强制类型转换在实际开发中运用的比较多,下面就具体地学习一下各种转换方式的使用。

1.自动类型转换

Java规定,在进行类型混合运算时,类型间的转换凡是符合表4.5的转换,都称为自动类型转换,可以由系统自动进行,无需人为干涉。表4.5列出了Java中不同类型数据之间的转换规则。

4.5  不同类型转换规则

1数类型

2数类型

转换后类型

byte  short

int

int

byte  short  int

long

long

byte short int long

float

float

byte short int long float

double

double

char

int

int

【代码剖析】下面是一个自动类型转换的实例,代码如下:

//文件名:Conversion.java

public class Conversion {

public static void main(String[] args) {

        short a = 10;

        byte b = 5;

        char c = 'A';

        int n = 6;

        System.out.println("short->int  "+(a-n));

        System.out.println("byte->int   "+(b*n));

        System.out.println("char->int  "+(c+n));

}

}

运行结果如下:

short->int  4

byte->int   30

char->int  71

【解释说明】数字之间的转换就不必多说了,主要看一下charint之间的转换,在Java中,每个字符都会有一个ASCII码,在与数字进行计算的时候,就是由字符的ASCII在进行计算,例如:AASCII65a的是97,剩下的字母按着须序依次加1。所以c+n=65+6=71

2.强制类型转换

程序中运算形式是多种多样的,不可能一个char型数据只能赋值给一个int型,一个int类型也是可以赋值给一个char型的,这种类型转换又不符合表4.5中的转换规则,所以Java是不会自动进行转换的,这时就只能用到了强制类型转换。它的转换格式为:

target-typevalue // target-type指想转换的类型,value指被转换的值

例如:

int a = 97;char c = (char)a;

Java规定,凡是符合表4.6的转换,就被称为强制类型转换。这种转换会损失精度,系统不会自动进行,必须由进行人为的控制。

4.6  强制类型转换

原类型

目的类型

byte

char

short

byte,char

char

byte,short

int

byte,short,char

long

byte,short,char,int

float

byte,short,char,int,long

 double

byte,short,char,int,long,float

【代码剖析】这是一个关于各类型之间的强制转化的实例,具体代码如下:

public class Conversion {

public static void main(String[] args) {

       double a = 123.5689124565656757657;

       float f = 2.65f;

       int n = 56;

        System.out.println("int->byte  "+(byte)n);

        System.out.println("float->int   "+(int)f);

        System.out.println("double->int  "+(double)a);

        System.out.println("int->char  "+(char)n);

}

}

运行结果如下:

int->byte  56

float->int   2

double->int  123.56891245656567

int->char  ?

【解释说明】当浮点型赋给整数类型时,它的小数部分就会被舍去。

3.包装类过渡类型转换

下面了解一下Java的包装类。所谓包装类,就是可以直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,会大量使用这些包装类。Java共有六个包装类,分别是BooleanCharacterIntegerLongFloatDouble,从字面上就可以看出它们分别对应于 booleancharintlongfloatdouble。而StringDate本身就是类。所以也就不存在什么包装类的概念了。

在进行简单数据类型之间的强制转换时,也可以利用包装类进行中间过渡。

一般情况下,首先声明一个变量,再将其转换成与其相对应的包装类的一个实例化对象,然后用这个对象调用相变成的类型的包装类中相应的方法进行类型转换了。例如,把int型转换为short型时,代码如下:

int i = 67;

Integter i = new Integer(i);

short s = it.shortValue(); // it.shortValue()short 类型返回该 Integer 的值

当希望把double型转换为int型时,如下所示。

double d1=100.00;

Double D1=new Double(d1);

int i1=D1.intValue();

简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:public Integer(int value)Boolean(boolean value)Character(char value)Long(long value)Float(float value)Double(double value)。而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据,如shortValue()。利用这种方法,也可以实现不同数值型变量间的转换。

简单类型如果和复合类型之间进行转换怎么办,比如说,如何将String类型转换成intint怎么转换成String,在表4.7中,就列出了String数据如何转换成原始数据的方法。将原始数据转换成String型共用一个方法Wrapper class.toStringxx value;基中Wrapper class指的是原始类型的包装类的类名,xx指是原始类型,value指的是原始类型的变量。下面举几个小例子,帮助理解加深印象。

4.7  String类型转换成数据类型

基本数据类型

的包装类

转换的方法

使用方式

说明

Byte (byte)

public static byte parseByte(String s)

Byte. parseByte ("")

返回由byte值表示的字符串参数

Short (short)

public static Short parseShort(String s)

Short.parseShort("")

返回由short值表示的字符串参数

Integer (int)

public static int parseInt(String s)

Integer. parseInt("")

返回由int值表示的字符串参数

Long (long)

public static long parseLong(String s)

Long.parseLong("")

返回由long值表示的字符串数。

Float (float)

public static float parseFloat(String s)

Float.parseFloat("")

返回由float值表示的字符串参数

Double (double)

public static double parseDouble(String s)

Double.parseDouble("")

返回由double值表示的字符串数

Boolean(boolean)

public static double parseBoolean(String s)

Boolean.parseBoolean("")

返回布尔值所表示的String参数。

【代码剖析】

1)下面是如何将原始类型转换成String型的例子,具体代码如下:

class StringType {

public static void main(String args[]) {

String n = Integer.toString(12);//int型常数12转换成String型变量n

String f = Float.toString(12.3f);//float型常数12.3转换成String型变量f

String d = Double.toString(12.6);//double型常数12.6转换成String型变量d

String l = Long.toString(123l); //long型常数123转换成String型变量l

String s = Short.toString((short) 12); //short型常数12转换成String型变量s

System.out.println("The StringType of int is  " + n);

System.out.println("The StringType of float is  " + f);

System.out.println("The StringType of double is  " + d);

System.out.println("The StringType of long is  " + l);

System.out.println("The StringType of short is  " + s);

}

}

运行结果如下:

The StringType of int is  12

The StringType of float is  12.3

The StringType of double is  12.6

The StringType of long is  123

The StringType of short is  12

【解释说明】String s = Short.toString((short) 12);如果不加强制类型转换(short),系统就会认为12int型的,因此是套用Short.toString()这个方法时,就会出现错误。

2)下面是如何将String型转换成原始类型的例子,具体代码如下:

class StringType {

public static void main(String args[]) {

String n = "123";

String f = "45.6f";

String d = "12.3695842";

String l = "15343434";

String b = "12";

int n1 = Integer.parseInt(n);

float f1 = Float.parseFloat(f);

double d1 = Double.parseDouble(d);

long l1 = Long.parseLong(l);

byte b1 = Byte.parseByte(b);

System.out.println("The intType of String is  " + n1);

System.out.println("The floatType of String is  " + f1);

System.out.println("The doubleType of String is  " + d1);

System.out.println("The longType of String is  " + l1);

System.out.println("The byteType of String is  " + b1);

}

}

运行结果如下:

The intType of String is  123

The floatType of String is  45.6

The doubleType of String is  12.3695842

The longType of String is  15343434

The byteType of String is  12

猜你喜欢

转载自blog.csdn.net/zyz0225/article/details/80700837