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

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)笔试题: 

    (1)考核各个数据类型之间的连接操作理解程度

  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) 考核对计算机变量存储的灵活应用

      int a = 200;

      int b = 500;

      在不申明第三方变量的情况下,如何对a和b的值进行互换?

      a = a + b;

      b = a - b;

      a = a - b;

      这样就完成了a和b的值互换,但是我们思考一下,其实是不严谨的。

      我们设想一下,如果a和b是一个很大的值,两个相加有可能超过了int的数值范围,那么有什么更好的办法吗?

      答案是肯定的,看下一篇文章《运算符》中的异或,那里给出了最完美的答案。

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

  【知识点】:

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

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

    输出结果:-128

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

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

    c)int类型不能强制类型转换成String

      int a = 100;
      String str = (String)a;//编译错误(Cannot cast from int to String)

    d)null值可以强制转换为任何java类类型

      笔试题:String str = (String)null和String str = null的区别

          两个是一样的,第一个可不是“null”字符串,它还是null。

    e)数值类型转换成字符串(有3种方法)

      int a = 33;
      String s1 = a + ""; //方法一:用+连接符和“”
      String s2 = Integer.toString(a); //方法二:Integer.toString
      String s3 = String.valueOf(a); //方法三:String.valueOf(看String源码发现valueOf调用的是方法二)

    f)字符串转换成数值类型(有2种方法)

      String s = "33";
      int a1 = Integer.parseInt(s);//方法一:用该数值类型的包装类的parse方法
      int a2 = Integer.valueOf(s); //方法二:用该数值类型的包装类的valueOf方法

跟着刚哥梳理java知识点——变量之间的类型转换(四)的更多相关文章

  1. 跟着刚哥梳理java知识点——面向对象(八)

    面向对象的核心概念:类和对象. 类:对一类事物描述,是抽象的.概念上的定义. 对象:实际存在的该类事物的每个个体,因而也成为实例(Instance). Java类及类的成员:属性(成员变量Field) ...

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

    创建多线程第一种方式:① 继承:继承Thread.② 重写:重写Thread类的run()方法③ 创建:创建一个子类的对象④ 调用:调用线程的start()方法,启动此线程,调用run()方法 cla ...

  3. 跟着刚哥梳理java知识点——深入理解String类(九)

    一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...

  4. 跟着刚哥梳理java知识点——泛型(十三)

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...

  5. 跟着刚哥梳理java知识点——运算符(五)

    运算符:是一种特殊的符号,用以表示数据的运算.赋值和比较. 1.算数运算符(+.-.*./.%.++.--) a)除: int i = 12; double d1 = i / 5; //2.0 dou ...

  6. 跟着刚哥梳理java知识点——IO(十五)

    凡是与输入.输出相关的类.接口都定义在java.io包下 java.io.File类 1.File是一个类,可以有构造器创建其对象.此对象对应着一个文件或者一个目录. 2.File中的类,仅涉及到如何 ...

  7. 跟着刚哥梳理java知识点——枚举和注解(十四)

    enum Season{ SPRING("spring","春暖花开"), SUMMER("summer","夏日炎炎" ...

  8. 跟着刚哥梳理java知识点——包装类(十)

    Java为8种基本数据类型都提供了对应的包装器类型 装箱和拆箱: public class Main { public static void main(String[] args) { Intege ...

  9. 跟着刚哥梳理java知识点——数组(七)

    数组:数组是多个相同类型数据类型的集合,实现对这些数据的统一管理. 元素:数组中的元素可以是任何数据类型,包括基本数据类型和引用类型. 特点:属于引用类型,数组型数据是对象object,数组中的每个元 ...

随机推荐

  1. 读书笔记 effective c++ Item 10 让赋值运算符返回指向*this的引用

    一个关于赋值的有趣的事情是你可以将它们链在一起: int x, y, z; x = y = z = ; // chain of assignments 同样有趣的是赋值采用右结合律,所以上面的赋值链被 ...

  2. 开始了大概三四天的Rails学习之路

    最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考.由于编程的日益流行,我结识了越来越 ...

  3. YARN学习笔记(一)——YARN的简介

    YARN的简介 什么是YARN MRv1的架构和缺陷 经典MapReduce的局限性 解决可伸缩性问题 YARN的架构 一个可运行任何分布式应用程序的集群 YARN中的应用程序提交 YARN的其他特性 ...

  4. Canada Cup 2016 C. Hidden Word

    C. Hidden Word time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  5. [hihoCoder]1014 Trie水题

    最最最最最最最基本的Trie词频统计应用了. package trie; import java.util.Scanner; public class Main { public static voi ...

  6. WeMall的Android app商城中的wemall doraemon代码

    WeMall-Android 包含SMSSDK/WeMall-Client/social_sdk_library_project三个项目以及Api目录下的client.php/update.xml接口 ...

  7. 关于百度地图js api的getCurrentPosition定位不准确的解决方法

    很久之前帮大叔解决了一个gps坐标转换为百度地图坐标的问题.今天大叔又给我讲百度地图定位不准.我查了一下api,用了官方给出的这样一组函数. //创建查询对象 var geolocation = ne ...

  8. 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第一弹)

    1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit:  ...

  9. 1218: [HNOI2003]激光炸弹

    1218: [HNOI2003]激光炸弹 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1139  Solved: 542[Submit][Statu ...

  10. C#"曾经的字符串数组"string[] array=new string[]{"**","****"};

    写博客是一件很伟大的事情,尤其是也牛逼的博客,因为它能帮助需要的人,更能使自己对知识有一个更为深刻的理解! 欢迎关注我的博客! 字符串操作(取当前时间) string time=convert.tos ...