强制类型转换

强制类型转换的语法格式是:(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。以上程序先将操作数转换为无符号整数,然后进行计算。