1.自动类型转换
public class PrimitiveAndString
{
public static void main(String[] args)
{
// 下面代码是错的,因为5是一个整数,不能直接赋给一个字符串
// String str1 = 5;
// 一个基本类型值和字符串进行连接运算时,基本类型值自动转换为字符串
String str2 = 3.5f + "";
// 下面输出3.5
System.out.println(str2);
// 下面语句输出7Hello!
System.out.println(3 + 4 + "Hello!");
// 下面语句输出Hello!34,因为Hello! + 3会把3当成字符串处理,
// 而后再把4当成字符串处理
System.out.println("Hello!" + 3 + 4);
}
}
2.强制类型转换
语法格式:(targetType)value,其运算符是圆括号。当进行强制类型转换时,类似于把一个大瓶子中的水倒入小瓶子中,如果大瓶子中水不多还好,如果大瓶子中水多,将会引起溢出,从而造成数据损失
1.当将浮点数强制转换成整数后,java将直接截断浮点数的小数部分。
2.int型转byte型
注:正数在计算机中以原码存放,负数在计算机中以补码显示
float a = 5.6;
//上面一行代码会报错,因为计算机中,浮点类型的数默认以double类型存放,必须用强制类型转换才可以。
float a = (float)5.6;
3.字符串与基本类型之间的相互转换
在通常情况下,字符串不能直接转换为基本类型,但通过基本类型的包装类则可以实现把字符串转换成基本类型,例如,把字符串转换成int型,则可以通过以下代码实现:
String a = "45";
//使用Integer的方法将一个字符串转换成int型
int iValue = Integer.pareseInt(a);
基本数据类型byte、short,int,long,float,double,boolean,char
相应的封装类型:Byte,Short,Integer,Long,Float,Double,Boolean,Character
一、基本数据类型to字符串类型(包含char类型)
(1)toString
①基本数据类型的都有一个静态方法toString(),转换时可以采用 "封装类型.toString(对应的基本数据类型字面值)" 方法来转换成字符串。
例:将int类型的20转成字符串,String s = Int.toString(20)。
②将基本数据类型封装成相应的封装类型对象,采用 "基本数据类型对象.toString()"方法转换成字符串。
例:将double类型的425.0转成字符串,Double d = new Double(425.0); String s =d.toString();
(2)+"",将基本数据类型字面值与空字符串""通过"+"连接
例:将long类型的200转成字符串,String s = 200 + "";
(3)valueOf,利用String类的静态方法valueOf()。
例:将char类型的'b'转成字符串,String.valueOf('b');
二、字符串to基本数据类型(不包含char类型)
(1)利用基本数据类型包装类的parseXxx方法
例:将字符串"123"转成int类型,int i = Integer.parseInt("123");
(需注意字符串转成基本数据类型时字符串内容必须是基本数据类型的字面值,否则编译虽然能通过,但运行时出现NumberFormatException)
(2)用字符串构造基本类型的封装对象,再调用封装对象的xxxValue方法
例:将字符串"20.5"转成double类型,Double d1 = new Double("20.5"); double d2 = d1.doubleValue();
4.表达式类型的自动提升
当一个算数表达式中包含多个基本类型是,整个算数表达式的数据类型将被提升。提升的规则如下
所有的byte类型,short类型和char类型将被提升到int类型
整个算数表达式的数据类型自动提升到与表达式中最高等级操作数相同的类型。
下面程序示范了一个典型的错误
public class AutoPromote
{
public static void main(String[] args)
{
// 定义一个short类型变量
short sValue = 5;
// 下面代码将出错:表达式中的sValue将自动提升到int类型,
// 则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。
// sValue = sValue - 2;
byte b = 40;
// 'a'在ascii表中对应97
char c = 'a';
int i = 23;
double d = .314;
// 右边表达式中在最高等级操作数为d(double型)
// 则右边表达式的类型为double型,故赋给一个double型变量
double result = b + c + i * d;
// 将输出144.222
System.out.println(result);
int val = 3;
// 右边表达式中2个操作数都是int,故右边表达式的类型为int
// 因此,虽然23/3不能除尽,依然得到一个int整数
int intResult = 23 / val;
System.out.println(intResult); // 将输出7
// 输出字符串Hello!a7
System.out.println("Hello!" + 'a' + 7);
// 输出字符串104Hello!
System.out.println('a' + 7 + "Hello!");
} |
|