跟着刚哥梳理java知识点——变量之间的类型转换

Posted 锲而不舍,金石可镂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟着刚哥梳理java知识点——变量之间的类型转换相关的知识,希望对你有一定的参考价值。

变量之间的类型转换主要包括自动类型转换强制类型转换

1、自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动的转换成容量大的类型。

  【知识点】:

    a)char,byte,short ---> int ---> long ---> float ---> double ---> String

  char c = ‘a‘;
  short s = 12;
  byte b = 125;   //char、short和byte之间运算全部自动转换成int   int s1 = c + s;   int s2 = b + s;   int s3 = c + b;   long l = 1000L;   //int和long之间的运算自动转换成long   long l1 = s1 + l;   float f = 12.36f;   //long和float之间的运算自动转换成float   float f1 = l1 + f;   double d = 16952;   //float和double之间的运算自动转换成double   double d1 = f1 + d;

  b)那是不是有人反思过这样的问题。

    short a = 3;   //编译正常

    a = a + 3;  //编译错误

    a += 3;     //编译正确(原因参照强制类型转换)

    3也是默认类型int类型,为什么直接赋值给a没事,而a+3自动转换成也是int类型的,再赋值就编译错误了呢?

    问题关键点在3是常量,这种赋值操作只有后面是变量的情况下才会发生编译错误。所以我们的标题叫做变量之间的类型转换。

  int a = 1;
  int b = 2;
  byte b1 = 1 + 2;//编译正确
  byte b2 = a + b;//编译错误(cannot convert from int to byte)

    那么常量运算也总结一下:

  byte b1 = 1 + 126;  //编译正确
  byte b2 = 1 + 127;  //编译错误(cannot convert from int to byte)
  int a = 1 + 1.2;    //编译错误(cannot convert from double to int)
  String s2 = 12 + "";//编译正确

    (1)127在byte的范围中,编译正常,而128超过了byte的范围,编译错误。

    (2)1 + 1.2 = 2.2,2.2是double类型,超过了int的范围,编译错误。

    (3)12 + " " = "12"(int + String = String),谁和String做运算都被自动转换成String。

     总结:做常量运算,看结果的数值范围。不能单纯的看类型范围。

  c)笔试题: 

  String a = "abc";
  char c = ‘a‘;//a的ASCII码是97
  int i = 12;
  System.out.println(a+c+i);//abca12
  System.out.println(c+i+a);//109abc
  System.out.println(a+i+c);//abc12a

 

2、强制类型转换:当容量大转换成容量小的,需要使用强制类型转换。用形式:(类型) 来做强制转换。

  【知识点】:

    a)强制类型转换的问题:导致精度的丢失

  int i = 128;
  byte by = (byte)i;
  System.out.println(by);

    输出结果:-128

    b)+=,-=,*= 这类的运算符运算是自动被强制类型转换的。

      例如上面的案例: a += 3; 其实等价于 short a = (short)a+3;所以肯定不会编译错误。

以上是关于跟着刚哥梳理java知识点——变量之间的类型转换的主要内容,如果未能解决你的问题,请参考以下文章

跟着刚哥梳理java知识点——流程控制

跟着刚哥梳理java知识点——注释

跟着刚哥梳理java知识点——多线程(十六)

跟着刚哥梳理java知识点——泛型和注解(十四)

跟着刚哥梳理java知识点——运算符

跟着刚哥梳理java知识点——反射和代理(十七)