这是我第一次系统性的总结java这门语言的基础知识用法,因本人经验有限,所以在总结的过程中如果有错误或者有歧义等等之类的问题,都可以联系我QQ:208017534 不甚感激.
今天给大家介绍的是java中基本数据类型是如何进行相互转换的。在介绍基本数据类型转换之前,先给大家介绍一下什么叫做基本数据类型:
java中数据类型分为两种:1.基本数据类型、2.引用数据类型
基本数据类型大致可以分为4种八类
4种:整型、浮点型、字符型和布尔型
八类:整型(byte、short、int、long)默认类型为int类型、浮点型(float、double) 默认类型为double类型、字符型(char)、布尔型(boolean)
基本数据类型各个类型的取值范围(其中大小指在存储过程中需要占的二进制位)
这一章节先不讨论什么是数组,类,接口,封装等等之类的,我会在后面几个章节中着重介绍的。引用数据类型:引用数据类型包括数组、类和接口
1.首先先来介绍一下byte的转型方法,下面看代码:
//byte注意事项 byte字段在进行运算的时候发生转型,
// 这个时候不能再将byte运算结果直接赋值给byte字段了,需要强制类型转换才可以。
byte b1=1;
byte b2=2;
// byte b3=b1+b2;//编译不通过
byte b4=(byte)(b1+b2);
int i1=10;
// byte b5=i1;//编译不通过
byte b6=20;
int i2=b6;
System.out.println("i2:"+i2);
2.short类型的转换方法和byte类似,如果直接在short类型上进行相互运算就会发生编译不通过的情形了。下面看具体例子: //short注意事项 short字段在进行运算的时候发生转型,
// 这个时候不能再将short运算结果直接赋值给short字段了,需要强制类型转换才可以。
short s1=1;
short s2=2;
// short s3=s1+s2;//编译不通过
short s4=(short)(s1+s2);
3.long类型的转换就完全可以互相运算了,下面看具体例子: long l1=1;
long l2=2;
long l3=l1+l2;
long l4=1+2;
4.并不是所有的类型都可以互相转换的,有些类型差别太大转换会编译不通过或者运行出错的。下面看看具体案例: //范围大的转为范围小的可以不需要强制类型转换就可以完成,
//反之范围小的转换为范围大,因为会发生精度损失,所以必须要强制类型转换才可以,否则编译不通过。
//但是类型之间转换也是要看字段属性是否相同,例如:int和double就可以进行互相转换,可是int和String就不可以了。
String str="str";
// int i=(int)str;//编译不通过
//这里有个特例就是Object的强制类型转换,因为Object是一个高度抽象的类型,所以可以强制转换为各种类型,
//编译都可以通过的,可是如果类型不符合,在运行的时候会发生错误。
Object o="str";
int i=(int)o;
5.数字字符串又该如何转型为相应的数据类型呢,下面看具体案例的介绍: //如果字符串是数字类型的数据,又该怎么进行转换呢?
int i=Integer.valueOf("1");
float f=Float.valueOf("1.1");
double d=Double.valueOf("1.23");
//如果数字类型想转为字符串,又改如何进行转换呢?
String strI=String.valueOf(1);
String strf=String.valueOf(1.0f);
String strd=String.valueOf(1.22d);
//还有一种更加坚简单的方法是
String strIi=1+"";
String strff=1.0f+"";
String strDd=1.23d+"";
6.类型转换过程中精度损失具体是损失哪些?下面看具体案例介绍: //强制类型转换的过程中,精度是如何进行损失的?小的数据量类型往大的转型又是如何扩大精度的呀?
int i = 1;
float f1 = 1.3f;
float f2 = 1.7f;
double d1 = 1.4d;
double d2 = 1.8d;
double d3 = 2.0;
int i1 = (int) f1;
int i2 = (int) f2;
int i3 = (int) d1;
int i4 = (int) d2;
int i5 = (int) d3;
float ff1 = i;
float ff2 = (float) d1;
double dd1 = i;
double dd2 = f1;
System.out.println("i1:" + i1);
System.out.println("i2:" + i2);
System.out.println("i3:" + i3);
System.out.println("i4:" + i4);
System.out.println("i4:" + i4);
System.out.println("ff1:" + ff1);
System.out.println("ff2:" + ff2);
System.out.println("dd1:" + dd1);
System.out.println("dd2:" + dd2);
//从结果可以看出在转型的过程中如果是int类型的话,在转化为float或者double都是变成(数值.0)的存在。
//如果是float或者double转换为int的时候都是浮点型前面的整数部分给int,浮点型小树后面的精度损失掉了。
//如果是float和double进行互相转换的话就会发生很奇怪的事情,就是例如1.3f变成1.2999999523162842d了
//所有最好不要再float和double类型上面直接进行互相转换,如果想要原值转换最好是利用字符串来进行转换。
//例如下面将给出的这个例子:
float f=1.23f;
double dd11,dd22;
String strF=f+"";
dd11=Double.valueOf(strF);
dd22=f;
System.out.println("f:"+f);
System.out.println("dd11:"+dd11);
System.out.println("dd22:"+dd22);
7.字符和其他数据类型转换过程是如何进行的呢?下面看看具体案例介绍: //类型转换时有字符型参与运算
// 当有字符参与运算时,系统首先回去找对应的ASCII码值,然后在参与运算 如 ‘a’ + 6 = 103
// 注意:int类型是可以赋值给char类型的 如 char a = (char) 97;
char c=(char)97;
int i='a';
System.out.println("c:"+c);
System.out.println("i"+i);
ASCII码表:
今天关于基本类型的转换问题就介绍到这里,因为本人经验有限,没办法介绍的很完全,所以只能挑我日常经常使用的部分给大家做介绍。
如果大家对文章有什么问题或者疑意之类的,可以加我订阅号在上面留言,订阅号上面我会定期更新最新博客。如果嫌麻烦可以直接加我wechat:lzqcode