byte数组转blob类型_Java数据类型的转换规则及原理,看这一篇就够了!

本文详细介绍了Java中数据类型的转换,包括基本类型间的自动和强制转换,以及与String类型的互转。重点讲解了byte数组到blob的转换规则,强调在转换过程中的类型匹配、精度损失和值域问题。建议使用String.valueOf()进行int到String的转换,并推荐使用Integer.parseInt()进行String到Int的转换。
摘要由CSDN通过智能技术生成

f31ad368686981c63a8db0795c257552.png

JAVA不像PHP,JS,Python,它是一门强类型语言。强类型的语言有以下几个要求:

  1. 变量或常量必须有类型:要求声明变量或常量时必须声明类型,而且只能在声明以后才能使用;
  2. 赋值时类型必须一致:值的类型必须和变量或常量的类型完全一致;
  3. 运算时类型必须一致:参与运算的数据类型必须一致才能运算。

但是在实际生产中,经常需要在不同类型的值之间进行操作,这就需要一种新的语法来适应这种需要,这个语法就是数据类型转换。作为基础中的基础,今天带大家重温一下:

正文

JAVA基本数据类型:byte,short,int,long为整型;float,double为浮点型;char为字符型;boolean 为布尔类型;

JAVA引用数据类型:类class,接口interface,数组[];

2a00d171a6d0a58bf5d3f694c9b38c8c.png

如此,我们也分两大块来讲解类型的转换问题:

基本类型之间的转换

在数值处理这部分,计算机和现实的逻辑不太一样。对于现实来说,1和 1.0 没有什么区别,但是对于计算机来说,1 是整数类型,而 1.0 就是浮点类型,其在内存中的存储方式以及占用的空间都不一样,所以类型转换在计算机内部是必须的。

Java 语言中,基本数据类型的转换分两种:

  1. 自动类型转换::编译器自动完成类型转换,不需要在程序中编写代码;
  2. 强制类型转换:强制编译器进行类型转换,必须在程序中编写代码。

由于基本数据类型中 boolean 类型不是数字型,所以基本数据类型的转换是除了 boolean 类型以外的其它 7 种类型之间的转换。

1de66ab58072239598a86f922edf5a1d.png

自动类型转换

自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以 Java 语言在设计时,没有为该操作设计语法,而是由 JVM 自动完成。

转换规则:从存储范围小的类型到存储范围大的类型;

具体规则为:byte → short(char) → int → long → float → double;

注意问题:

  1. JAVA将byte,short,char表示范围归为一个层次,因此byte,short,char不会相互转换,这三者在计算的时候都会首先转换成int型;
  2. 有多种数据类型进行混合运算时,JAVA会先将所有数据类型转换成表示范围大的那一种数据类型在进行运算;
  3. 浮点型(如:3.14)常量默认的数据类型为double型,整型常量(如:520)默认为int型;
deec0cb7c7d4b86f53574f0c33854487.png

强制类型转换

强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。

转换规则:从存储范围大的类型到存储范围小的类型。

具体规则为:double → float → long → int → short(char) → byte

语法格式为:(转换到的类型)需要转换的值

注意问题:

  1. 在整数之间进行类型转换的时候数值不会发生变化,但是当将整数类型特别是比较大的整数类型转换成小数类型的时候,由于存储精度的不同,可能会存在数据精度的损失或者溢出的问题;
364b71fc28b60aa883e579d279bd5fb0.png

与String类型的互转

Java的字符串String属于一个类,所以它属于引用数据类型。因为在引用数据类型中,只存在String与基本数据类型的互转。因为基本数据类型与String互转原理相同,方法相似,所以这里以int为例,讲解一下规则和原理:

int转String有三种方法

  • num + ""
  • Integer.toString(num)
  • String.valueOf(num)
ad1197cb6f8518c2572f08568af126a9.png

可以发现,第一种方式与后面两种方式运行的时间相差比较大,这里简单说一下区别:

num + "":先将数字toString()转成字符串,然后进行字符串的拼接,效率自然很低,且过程中会产生两个String对象;

Integer.toString():采用Integer.toString()的基础是Object.toString(),因为java.lang.Object类中已有public方法toString(),所以对任何严格意义上的Java对象都可以调用此方法,但使用时需要注意,必须保证object不是null值,否则将会抛出NullPointerException异常;

String.valueOf():直接使用String类的静态方法,只产生一个对象,基础仍是Object.toString()方法,JDK中String.valueOf(object)源码:

224e42d0a2f0a302a1aa4bf4104060e7.png

所以使用该方法不必担心object为null的情况,但同时也要注意:当object为null时,该方法返回字符串"null",而非null,此处是个坑!!

String 转 Int有两种方法

  • Integer.parseInt(str)
  • Integer.valueOf(str).intValue()
2c3860a39abbcde92ac280c9d5c24363.png

可以发现,两者运行时间基本差不多,但是原理还是相差甚远的:

Integer.valueOf(str).intValue():但此方法运用了包装类的拆装箱操作,先是将String -> Integer -> int,即将String包装类型转化为Integer包装类型,再将包装类型转化为基本类型, 等价于 new Integer(Integer.parseInt(str)),过程中会产生额外的一个对象。

Integer.parseInt():直接使用String类的静态方法,只产生一个对象;

d2dfa44eca20beb1687f6ddaa9a07a39.png

小结

  1. 基本数据类型的互转,在大转小时要注意值域,由于存储精度的不同,可能造成数据精度的损失或者溢出;
  2. int转String 建议使用String.valueOf()方法,需要注意object为null时,返回值为字符串的"null";
  3. String 转 Int 两种方法效率虽然差不多,但是建议使用Integer.parseInt()方法;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值