强制类型转换
强制类型转换的语法格式是:(targetType)value,强制类型转换的运算符是()
强制类型转换时,类似于把一个大瓶子里的水倒入一个小瓶子,若大瓶子里水多于小瓶子,会引起溢出,造成数据丢失。
把一个浮点数强制转换为整数时,Java将直接截断浮点数的小数部分。
//强制把一个int类型的值转换为byte类型的值
int iValue = 233;
byte bValue = (byte)ivalue;
//将输出-23
System.out.println(bValue);
//强制把一个double类型的值转换为int类型的值
double dValue = 3.98;
int tol = (int)dValue;
//将输出3
System.out.println(tol);
包装类
利用包装类可以进行基本数据类型和Object类型变量使用的问题
基本数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
1.自动装箱和自动拆箱
自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量(Object类是所有类的父类,子类对象可以直接赋给父类变量);自动拆箱与之相反。
//直接把一个基本类型变量赋给Integer对象
Integer inObj = 5;
//直接把一个boolean类型变量赋给一个Object类型的变量
Object boolObj - true;
//直接把一个Integer对象赋给int类型的变量
int it = inObj;
if(boolObj instanceof Boolean)
{
//先把Object对象强制转换为Boolean类型,再赋给boolean变量
boolean b = (Boolean)boolObj;
System.out.println(b);
}
进行自动装箱时必须注意类型匹配。如Integer只能自动拆箱成int类型变量,int类型变量也只能自动装箱成Integer对象 (即使赋给Object类型变量,那也只是利用了Java的向上自动转型特性。
2. 基本数据类型变量 转换为 字符串:
(1)valueOf()方法
(2)将基本类型变量和""进行连接运算
如: String intStr = 5 + "";
3. 字符串 转换为 基本数据类型变量:
(1) parseXxx(String s)静态方法(除了Character以外的所有包装类都提供了该方法)
(2)Xxx(String s)构造器
//把一个double变量转换为String变量
String dbStr = String.valueOf(3.344);
System.out.println(dbStr)
String intStr = "123";
//把一个特定字符串转换为int变量
int it1 = Integer.parseInt(intStr);
int it2 = new Integer(intStr);
System.out.println(it2);
4. 比较两个基本类型值的大小:compare(xxx vall , xxx val2)方法
System.out.println(Boolean.compare(true,false))//输出1
System.out.println(Boolean.compare(true,true)) //输出0
5. 无符号算术运算(Integer、Long):
(1) static String toUnsignedString(int/long i) : 该方法指定int或long类型整数转换为无符号整数对应的字符串
(2) static String toUnsignedString(int i/long ,int radix) : 该方法指定int或long类型整数转换为指定进制的无符号整数对应的字符串
(3) static xxx parseUnsignedXxx(String s) : 该方法将指定字符串解析成无符号整数。当调用类为Integer时,xxx代表int;当调用类是Long时,xxx代表long
(4) static xxx parseUnsignedXxx(String s,int radix) : 该方法将指定字符串按指定进制解析成无符号整数。当调用类为Integer时,xxx代表int;当调用类是Long时,xxx代表long
(5) static int compareUnsigned(xxx x,xxx y) : 该方法将x、y两个整数转换为无符号整数后比较大小。当调用类为Integer时,xxx代表int;当调用类是Long时,xxx代表long
(6) static long remainderUnsigned(long dividend,long dividor) : 该方法将x、y两个整数转换为无符号整数后计算它们相除的余数。当调用类为Integer时,xxx代表int;当调用类是Long时,xxx代表long
(7) static long divideUnsigned(long dividend,long dividor) : 该方法将x、y两个整数转换为无符号整数后计算它们相除的商。当调用类为Integer时,xxx代表int;当调用类是Long时,xxx代表long
Java8还为Byte、Short增加了toUnsignedInt(xxx x)、toUnsignedLong(yyy x)两个方法,这两个方法用于将指定byte或short类型的变量或值转换成无符号的int或long值。
byte b = -3;
//将byte类型的-3转换为无符号整数
System.out.println(Byte.toUnsignedInt(b); //输出253
//指定使用16进制解析无符号整数
int val = Integer.parseUnsignedInt("ab",16);
System.out.println(val); //输出171
//将-12转换为无符号int型,然后转换为十六进制的字符串
System.out.println(Integer.toUnsignedString(-12,16)); //输出fffffff4
//将两个数转换为无符号整数后相除
System.out.pringln(Integer.divideUnsigned(-2,3));
//讲两个数转换为无符号整数相除后求余
System.out.println(Integer.remainderUnsigned(-2,7));
无符号整数最高位不再被当成符号位,因此无符号整数不支持负数,最小值为0。以上程序先将操作数转换为无符号整数,然后进行计算。