java基本数据类型转换


/**
*
* 转换基本数据类型
*
*/
public class ChangeBasicType
{
/**
* 基本类型的数据提升
*/
private void typeAutoUpgrade()
{
byte b = 44;
char c = 'b';
short s = 1024;
int i = 40000;
long l = 12463l;
float f = 35.67f;
double d = 3.1234d;

/*
* (f * b)时,b自动提升为float类型
* (l*f)时,l自动提升为float类型
* (i/c)时,c自动提升为int类型
* (d*s)时,s自动提升为double类型
* 再相加时,中间结果都变为了double类型。
* 这里result只能声明为double类型,result声明为其他类型会出错,除非进行强制类型转换
*/
double result = (f*b) + (l*f) + (i/c) - (d*s);
System.out.println((f*b) + " + " + (l*f) + " + " + (i/c) + " - " + (d*s));
System.out.println(" = " + result);
}

/**
* 基本类型的自动转换
* 自动类型转换发生的条件是:
* 1:两种类型是兼容的
* 2:目标类型的范围比源类型的范围大
* 其他情况下,必须进行强制类型转换
*/
private void autoChange()
{
char c = 'a';
byte b = 44;
short s0 = b;
int i0 = s0;
int i1 = c;
long l = i0;
float f = l;
double d = f;
System.out.println("c = " + c + "; b= " + b + "; s0 = " + s0);
System.out.println("i0 = " + i0 + "; i1 = " + i1 + "; l = " + l);
System.out.println("f = " + f + "; d = " + d);

/*
* 当float类型转换成double时,会出现不等的情况,这是因为,float的范围是
* 32位,而double的范围是64位,在进行类型转换时,操作的实际上都是二进制
* 数,有些实数用二进制能够精确表示,而有些实数无论用多少位二进制都无法表示
* 这与有理数和无理数概念一样。
* 对不能精确表示的实数进行类型转换时,会出现不相等的情况。
*/
float f1 = 1.7f;
double dou = f1;
System.out.println("f1 = " + f1 + "; dou = " + dou);
//但是当把一个数从一种类型转换成另外一种类型后,再转换回来时,值还是一样
f1 = (float)dou;
System.out.println("f1 = " + f1 + "; dou = " + dou);
}

/**
* 强制类型转换
* 当两种类型不兼容,或者目标类型范围比源类型范围小时,必须进行强制类型转换
* 具体转换时会进行截断,取模操作
*/
private void forceChange()
{
double d = 123.456d;
float f = (float)d;
long l = (long)d;
int i = (int)d;
short s = (short)d;
byte b = (byte)d;
System.out.println("d = " + d + "; f = " + f + "; l = " + l);
System.out.println("i = " + i + "; s = " + s + "; b = " + b );

d = 567.89d;
/*
* 下面的转换首先进行截断操作,将d的值变为567,因为567比byte的范围256大。
* 于是进行取模操作,567对256取模后的值为55
*/
b = (byte)d;
System.out.println("d = " + d + "; b = " + b);
}

public static void main(String args[])
{
ChangeBasicType cbt = new ChangeBasicType();
System.out.println("===================基本类型自动提升=====================");
cbt.typeAutoUpgrade();
System.out.println("===================基本类型自动的转换====================");
cbt.autoChange();
System.out.println("===================强制类型转换=========================");
cbt.forceChange();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值