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

前言:Java语言提供的7种数值类型转换有两种方式:自动类型转换和强制类型转换。
一、自动类型转换

  • 表数范围小的可以直接自动转换成表数范围大的
    小白Java笔记——基本类型的类型转换和表达式类型的自动提升_第1张图片
  • 具体例子不祥写了,唯独需要注意的是:把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串,就像上一篇里面的例子,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);

小白Java笔记——基本类型的类型转换和表达式类型的自动提升_第2张图片
三、表达式类型的自动提升

  • 一个算数表达式有多个基本数据类型时,会发生数据类型自动提升,规则如下:
    1.所有的byte、char和short类型自动提升为int类型;
    2.整个表达式的数据类型自动提升到最高级操作数同样的类型,操作数等级排列如图(从左到右等级一次增加):
    小白Java笔记——基本类型的类型转换和表达式类型的自动提升_第3张图片
    举个例子;
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基础)