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 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

Java 常见的 30 个误区与细节!

1261
来自专栏程序员互动联盟

【编程基础】C语言逻辑运算符

C语言关系运算符和逻辑运算符几乎无所不在,比如在循环语句、分支语句、逻辑判断等语句块中都会出现。学好这部分对学好C语言具有重要作用。 C语言中有一共有如下6中...

3346
来自专栏Java架构师进阶

Java 常见的 30 个误区与细节!

1、在Java中,没有goto语句。因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用。同时,为了避免程序员自行使用go...

663
来自专栏Deep learning进阶路

C++随记(九)---名称空间

C++随记(九)---名称空间 C++中,名称可以是变量、函数、结构、类等等,项目增大会使得名称冲突的可能性增大,人类可用的单词数太少,并且不同的人写的程序不可...

1700
来自专栏C语言及其他语言

数组

1、 一维数组的定义和使用 通过对前面知识的学习,我们已经知道如何定义和使用一个一个的各种变量,但总有不够用的时候。举个例子,我要记录一个班32个同学C语...

3818
来自专栏desperate633

浅谈javascript中的回调函数javascript中的函数匿名函数回调函数回调函数的使用回调函数实例总结

要理解javascript中的回调函数,首先我们就要对javascript中的函数有一定的理解,所以我们先从javascript中函数谈起,讲讲它与其他语言中的...

592
来自专栏程序员互动联盟

【编程基础】C语言类型转换

我们在编程序的时候,经常会出现不同类型的数据之间需要计算、赋值,必然会出现类型转换问题。C语言的变量数据类型是可以转换的,转换的方法有两类,一种是自动转换,一种...

34813
来自专栏塔奇克马敲代码

第2章 变量和基本类型

1864
来自专栏散尽浮华

Python内置函数

内置函数之一:lambda表达式 前面知识回顾: 三目运算: #普通条件语句 1: if 1 == 1: 2: name ='曹小贱' 3:...

1815
来自专栏猿人谷

sizeof和strlen的区别

第一个例子:  char *ss="0123456789";    sizeof(ss)=4, ss是指向字符串常量的字符指针。    sizeof(*s...

1778

扫码关注云+社区