java中基本数据类型之间的转换 int double byte short

来源:互联网 发布:美图淘淘mac版 编辑:程序博客网 时间:2024/06/01 10:05

不同的基本类型之间可以相互转换:

自动类型转换(隐式类型转换):从小类型到大类型可以自动完成.类型的大小关系如下图所示:


强制转换:从大类型到小类型需要强制转换符:

(需要转换成的类型)变量

但这样转换可能会造成精度损失或者溢出


强制转换时的精度丧失和溢出

基本类型转换示例,注意强制转换时可能会造成的精度丧失和溢出

int a=100;

int b=200;

long c=a+b;//自动将int转换为long

long 1l=1024l;

int i=(int)1l;  //需要加强制转换符由于1024在int的范围内没有产生溢出


long l=1024L*1024*1024*4;

int j=(int) l;//会产生溢出

System.out.println(j);  //结果为0

double pi=3.141592635897932384;

float f=(float)pi; //会造成精度损失

System.out.println(f);//结果为:3.1415927


数值运算时的自动转换

多种基本类型参与的表达式运算中,运算结果会自动向较大类型进行转换:

//由于有long型的直接量参与,整个表达式结果为long

long distance=10000*365*24*60*60*299792458l;

//由于有double型的直接量599.0参与,整个表达式的结果为double

double change=800-599.0;


double persent1=80/100;

//结果为0.0,右边都是int型数据,运算结果也为int类型,结果为0,再赋值给double型,将0转换成0.0

double persent2=80.0/100;

//结果为0.8,右边表达式有double型直接量参与,运算结果为double型


byte、char、short转换为int

byte、char、short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:

-int直接量可以之间赋值给byte,char和short,只要不超过其表达范围

-byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算


使用%运算符

java算数运算符除通常的(+),减(-),乘(*),除(/)之外,还包括取模

运算(%)和自增(++)及自减(--)运算.

取模运算(%)意为取余数,可适用于整数,char类型以及浮点数.

//输出255除以8所得余数

int n=255;

System.out.println(n%8); //结果为1


使用"++"和"--"运算符

java的自增运算符和自减运算符继承自C++,可以使变量的值加1或减1,但其写在

变量前和变量后有不同的效果:

-如果写在变量前使用表示在使用整个变量之前加1或减1

-如果写在变量之后表示这个变量使用完之后再加1或减1


关系运算符用于判断数据之间的大小关系,包括大于(>),小于(<),

大于等于(>=),小于等于(<=),等于(==),不等于(!=)六个运算符

关系运算的结果为boolean类型,关系成立为true,否则为false


逻辑运算符

逻辑运算符建立在关系运算的基础上,逻辑运算符包括:

与(&&),或(||)和非(!).

参与逻辑运算的变量或表达式都是boolean类型,运算结果也为

boolean类型,逻辑运算规则如下表所示:

&&是两个都为true时为true,一个为false时则是false

||使用或运算符,两个boolean变量参与||运算时,当两个变量

有一个true时,结果即为true,只有两个变量均为false时结果为false


使用“!”运算符

“!"运算相对简单,只会有一个boolean变量参与运算

运算的值与该变量相反,变量为true时结果为false,变量值为false结果为true


关于"短路逻辑"的问题

java逻辑运算遵循"短路逻辑"的原则:

-对于"&&",当第一个操作数为false时,将不会判断第二个操作数,因此此时无论

第二个操作数为何,最后的运算结果一定时false;

-对于"||",当第一个操作数为true时,将不会判断第二个操作数,因为此时无论

第二个操作数为何,最后的运算结果一定时true.



变量使用过程中的常识问题:

1>使用未经声明的变量

2>使用不符合java标识命名规则的变量

3>使用未经初始化的变量.

4>变量的赋值与变量类型不匹配


整数类型(int,long)使用常识问题:

1>整数直接量超出了整数的范围.

2>关于整数的除法:两个整数相除,会舍弃小数的部分,结果也是整数

3>整数运算的溢出:两个整数进行运算时,其结果可能会超出整数范围而溢出

4>表示long直接量,需要以L或者l结尾

浮点类型在使用中,常见问题:

1>浮点数直接量为double类型

2>浮点数存在舍入误差问题(由于浮点数内部用二进制方式表示

十进制,会存在舍入误差.二进制无法精确表示1/10,就好像十进制系统中

无法精确表示1/3一样.对与要求精确运算的场合会导致代码缺陷,如果需要精确运算

可以考虑放弃使用double或float而采用BigDecimal类来实现)


4.对char类型变量的各种赋值方式:

1>字符类型存储中文(字符类型事实上时一个16为无符号整数,这个值时对应字符的编码,

java字符类型采用Unicode字符编码,Unicode时世界通用的定长字符集,所有字符都是16

位字符直接量。对应中文,可以采用诸如:'中'的形式,也可以采用其对应的16进制的表示形式,

两个字节表示一个字符(中英文都一样)

例如:‘\u4e2d'.

2>char类型的值可以作为整数类型之间使用

char类型的值可以之间作为整数类型的值来使用,字符类型事实上是一个16位无符号整数

即全部是正数,表示范围时0~65535

char zhong='疯';

int zhongvalue=zhong;

System.out.println(zhongvalue); //30127

上述输出范围为0~65535,如果把0~65535范围内的一个int整数赋给char类型整数

系统会自动把这个int类型整数当成char类型来处理,如下:

char c=97;

System.out.println(c);

上述代码输出结果为a.这说明系统自动把整数类型97当成char类型来处理,处理结果为a,

即97为字母a的unicode码.


5.类型转换常见问题:

数据类型转换再使用过程中,常见问题如下:

1>强制转换时的精度丧失和溢出.

2>数字运算时的自动转换.

3>byte,char,short转换为int的问题

byte b1=28;

byte b2=20;

byte b3=b1+b2;    //编译错误  结果是int类型不能赋值给byte
































阅读全文
0 0
原创粉丝点击