Java基础知识-基本数据类型相互转型

这是我第一次系统性的总结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码表:

今天关于基本类型的转换问题就介绍到这里,因为本人经验有限,没办法介绍的很完全,所以只能挑我日常经常使用的部分给大家做介绍。如果看完这章还是疑问很大的或者不清楚的,都可以过来联系我QQ:208017534 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python专栏

Python | 19个优雅的Python编程技巧

http://lovesoo.org/pythonic-python-programming.html

1062
来自专栏CRPER折腾记

Vue 折腾记 - (6) 写一个不大靠谱的backToTop组件

返回顶部这个功能用jq实现,好容易实现,一个animate配合scrollTo就搞定了

651
来自专栏zaking's

用js来实现那些数据结构03(数组篇03-排序及多维数组)

  终于,这是有关于数组的最后一篇,下一篇会真真切切给大家带来数据结构在js中的实现方式。那么这篇文章还是得啰嗦一下数组的相关知识,因为数组真的太重要了!不要怀...

3025
来自专栏前端儿

表达式求值(1)

Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值...

1102
来自专栏blackheart的专栏

[程序设计语言]-[核心概念]-03:控制流

0.概述 前面介绍了语言的演进以及一些基础概念后,从本篇开始进入了语言的核心问题中。这一篇讨论的是语言计算模型(大致可以用控制流来表述),大致如下7种: 顺序执...

18910
来自专栏Python爱好者

Java基础笔记02

802
来自专栏大数据钻研

HTML5新增及移除的元素

HTML经过10多年的发展,其元素经历了废弃与不断重新定义的过程。为了更好的处理现在的互联网应用,HTML5新增了图形绘制、多媒体播放、页面结构、应用程序存储、...

2558
来自专栏linux驱动个人学习

链接器做了什么?

摘自《程序员自我修养》 ---- 机器指令的历史 为了更好的理解计算机程序的编译和链接的过程,我们简单地回顾计算机程序开发的历史一定会非常有益。 最原始的设备...

3476
来自专栏前端布道

为什么是link-visited-hover-active

前言 通常我们在设置链接的一些伪类(link,visited,hover,active)样式时,要让不同的状态显示正确的样式,我们需要按一定的顺序设置这些伪类的...

3335
来自专栏程序员叨叨叨

6.8 控制流语句(Control Flow Statement)

程序最小的独立单元是语句(statement),语句一般由分号结尾,缺省情况下,语句是顺序执行的,但是当涉及逻辑判断控制时,就要求有控制流程序语句。控制流程序语...

973

扫码关注云+社区