java基本数据类型怎么转换,怎么定义(以最通俗的方法讲述)(最后有总结)(适合新人)

java基本数据类型:
1、整型
byte(1字节)、short(2字节)、int(4字节)、long(8字节)
2、浮点型
float(4字节)、double(8字节)
3、字符型
char(2字节)
4、布尔型
boolean

数据类型定义:
定义时系统会默认整型数据类型(byte、short、int、long)为int,浮点型(float、double)默认为double
如以下代码:

short num=123

其实分为三步:
1、给int型变量 num赋值123(此时num默认为int型)
2、将num变为short型
3、得到short型变量num,值为123
如果代码是这样:

long num=10000000000

系统就会报错,因为根据刚才的步骤,long型100亿是从int型转变过来的,又因为int型数据范围低于100亿,所以会报错。
那遇到这种情况我们就要强制转换数据类型,如下:

long num=10000000000L;

在数值后面加L(为了区分,最好用大写)
这样,就定义了long型变量num
若num的数值小于int的范围,就不需要加L了
同理 定义double型也是这种情况:

double num=1.1234567890123F

数据类型的转换:
要清楚:除了布尔型,另外七种数据类型之间是可以随意转换的(可能造成***位丢失***或***降低精确度***问题)
1、范围小的数据类型转范围大的数据类型:
直接转

short a=123int b=a;
Systen.out.pritln(b);

2、范围大的数据类型转范围小的数据类型:
强制转换(在需要转的变量前加(转之后的类型))

 int a=123short b=short)a;
Systen.out.pritln(b);

int a=123;
Systen.out.pritln(short)a);

大转小可能会出现缺位导致结果不正确的情况:如

 int a=257;
 byte b=(byte)a;
 Systen.out.println(b);

输出结果为1 ????????怎么回事?这已经不是丢失精确度,而是完完全全错了,到底怎么回事?
首先
我们知道int在内存中占4字节,1字节8位,所以int为48=32位,257在内存中存储如下:
(00000000)(00000000)(00000001)(00000001)
而byte为1字节(8位)
int转为byte时,byte只会读取int的最低低8位,其余舍去,即读取为(00000001),二进制表示为1**2^0=1
但 如果数字改为120,8位可以表示完,及时舍弃前面3
8=24位也不影响结果,就不会出现缺位导致结果错误的情况,仔细一想,还是很容易理解的

但只要数据属于范围,就不会出现这种情况
浮点和整型之间的转换:
int转float会有精度损失,确实是这样,但int4字节,取值范围是-21亿多–21亿多,float4字节,范围±3.40282347e+38f,明显大于int的范围,为何还会有精度的损失? 就涉及到小数在计算机里的表示方法,总之,float和int都是32位,但存储方式不同,float有24位来确定精度,int有32位,所以int精度高于float,所以int转float可能有精度的损失(long与double同理,double有53位来确定精度)
比如说:

int num=123456789;
float f=num;

结果为1.23456792e8,也就是我们常说的float精确到小数后6位,double精确到15,16位由此我们也理解了int,long,float,double之间转换时精度丢失的情况*(float有23位来确定精度,int有32位来确定精度,double有53位来确定精度,long有64位来确定精度)*

总结

1、数据类型定义(默认定义的数据类型的数值在其大小范围内)

  • 系统会输入的整数数值都默认为int型,小数数值都默认为double型,可以这么理解:float a=1(1为int型)float a=1.0f(1.0为double型)

  • 定义整型时 (整数数值)

     1 、若定义的类型范围小于int(byte、short)----------正常定义
       
     2 、若定义的类型范围大于int(long)
        (1)数值未超出int范围--------------------------正常定义
        (2)数值超出int范围---------------------------数值末尾加L
     3 、若定义的类型为其本身(int)---------------------正常定义
    
  • 定义浮点型时(小数数值)

     1 、若定义的类型范围小于double(float)-------------数值后加f
     2 、若定义的类型为其本身(double)------------------正常定义
    

2、数据类型的转换

  • 数据类型范围大小比较:
    byte(8)<short(16)=char(16)< float(24)<int(32)<long(53)<double(64)

  • 小到大直接转

  • 大到小或同级之间

    1 、数值属于范围-----直接转
    2 、数值超出范围---强制转(丢失精度或缺位)
    
发布了1 篇原创文章 · 获赞 1 · 访问量 12
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览