您的位置:首页 > 编程语言 > Java开发

小白Java笔记——基本类型的类型转换和表达式类型的自动提升

2017-12-04 16:07 483 查看
前言:Java语言提供的7种数值类型转换有两种方式:自动类型转换和强制类型转换。

一、自动类型转换

表数范围小的可以直接自动转换成表数范围大的



具体例子不祥写了,唯独需要注意的是:把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串,就像上一篇里面的例子,boolean值转换成字符串

方法就是把基本类型的值和空字符串用+进行连接即可

http://blog.csdn.net/lunatic_fei/article/details/78657767

System.out.println(3+4+"Hello!");
System.out.println("Hello!"+3+4);


结果:

7Hello!
Hello!34


解释:第一个会执行3+4,两个整数之间的加法运算,最后变成7+”Hello!“,这是由于后面跟了字符串,所以加号在这里充当连接的作用,把7转换成了字符串;

至于第二个,因为第一个就是字符串”Hello!“,那么紧挨着的加号就又充当了连接的作用,所以后面的3就转换成了字符串形式,即Hello!3,那么同理,在其后面紧挨的加号又是连接的作用,所以4也被当成字符串。

二、强制类型的转换

如果要把上面的图片中,箭头右边要转换成左边的类型,就需要强制转换。通俗的说就是大瓶子的水倒在小瓶子里;

缩小转换(Narrow Conversion):如果大瓶子里的水很多,那么倒在小瓶子里就会溢出,引起数据丢失。

//强制转换的规范定义
int iValue = 233;
byte bValue = (byte)iValue;


以及经常出错的代码:

//因为默认5.6是double类型,所以会出错
float a = 5.6;
//正确的改法之方法一:
float a = (float)5.6;
//方法二:
float a = 5.6f;


经常见到的“随机生成六个字母验证码”例子:

//实现这个功能的代码有很多种,初学就挑最简单的先理解,后续继续补充
public class RandomStr{
public static void main(String[] args){
String result = "";
for(int i=0 ;i<6;i++){
//Math.random()方法是随机生成0~26之间的小数,也就是0.**~25.**再加上97得到97.**~112.**的数,也就是ASCII对应的小写字母(大写65-96),最后通过强制转换成int类型,就变成了97~112的整数;
int intval = (int)(Math.random()*26+97);
//通过强制类型转换成char字符,结果就会输出对应的小写字符;如果不强制,只会输出ASCII的数值,通过与空字符连接转换字符串输出。
result = result+(char)intval;
}
System.out.println(result);

}

}


值得提的是,字符串类型转换成基本类型的情况,不能直接转换——而是通过基本类型对应的包装类(后面会详细介绍,这里简单一提)

String a = "45";
int intval = Integer.parseInt(a);




三、表达式类型的自动提升

一个算数表达式有多个基本数据类型时,会发生数据类型自动提升,规则如下:

1.所有的byte、char和short类型自动提升为int类型;

2.整个表达式的数据类型自动提升到最高级操作数同样的类型,操作数等级排列如图(从左到右等级一次增加):



举个例子;

byte b = 40;
char c = 'a';
int i = 23;
double d = .314;
//右边最高级别是double,所以自动提升为double
double result = b+c+i*d;
System.out.println(result);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java class 语言