转载自:
目录
总结一下两篇博文所说:
java中类型转换方式分两种:自动类型转换和强制类型转换
1.自动类型转换
把表数范围小的数值或变量赋给表数范围大的变量。
数值型类型主要区别是分配的内存空间大小不同。自动类型转换相当于一杯水往一个容积大的空桶之中倒进,水不会流出来,相反如果一桶水往一个小的空间杯子里面倒进的时候,水就会溢出。
- 表达式类型转换(隐性的方式):属于自动类型转换
表达式类型转换的自动提升规则:
1)所有的byte类型、short类型将被提升到int类型
2)整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。
例子:
short a = 5;
a= a-2;
这个时候会报错,因为a-2表达式已经被提升到int类型,而把int类型的赋给short,会引发错误。正确的如下:
short a = 5;
int b = a-2;
2.强制类型转换
语法格式:targetType value2 = (targetType)value;(一般value原本的类型分配的内存空间比value2的类型分配的内存空间大)
因此强制转换需要注意点:
1).把一个浮点数强制转换为整数时,java会直接截断浮点数的小数部分。
2).把一个超出数据范围的数值赋给数据类型时,会出现数据溢出的情况,造成数据的缺失。
如:把233强制类型转换为byte类型的整数,233变成-23。32位int类型的233强制类型转换为8位的byte类型,需要截断前面24位,只保留右边8位,最左边的1是一个符号位,此处表明这是一个负数。
负数在计算机里面是以补码形式存在的,因此还需要换算成原码。将补码减1就得到反码形式,再将反码取反就可以得到原码。
里面的变化如下图。
基本类型与字符串类型之间的相互转换
- 基本类型->字符串(String)
- 基本类型的值+"" 最简单的方法(工作中常用)
- 包装类的静态方法toString(参数),是Object类的toString()重载 static String toString(int i) :返回一个表示指定整数的String对象。
- String类的静态方法valueOf(参数) static String valueOf(int i) :返回int参数的字符串表示形式。
System.out.println(1 + "23");//123
System.out.println(Integer.toString(23));
System.out.println(Integer.valueOf(23));
- 字符串(String)->基本类型
使用包装类的静态方法parseXXX("字符串");
如:
Integer类:static int parseInt(String s)
Double类:static double parseDouble(String s)
int Value = Integer.parseInt("45");
System.out.println(Value);
double Value2 = Double.parseDouble("45.21");
System.out.println(Value2);