包装类、String类、基础数据类型之间的转换

 为做字符串的题做准备,复习一下自动拆箱装箱以及相互转换。


 String类,基本数据类型,包装类。共同形成三组关系,如果用箭头就是6对关系,互相指向。
图片说明

1.基本数据类型与成包装类(装箱拆箱) 之间的互相转换

jdk 1.5之后实现了自动装箱拆箱。

//装箱的3种示例(2种手动1中自动)
int number = 1;

Integer num1 = new Integer(number);//手动装箱 
Integer num = new Integer(1);//手动装箱。这两个都是构造器方法
Integer num2 = number;//自动装箱  也就是Integer num2 = 1;

//拆箱的示例(只有装箱了才能拆)
Integer num = new Integer(1);//手动装箱 

int num1 = num.intValue();//手动拆箱 
int num2 = num;//自动拆箱

2.包装类与String类之间的互相转换

//String转包装类
//写法1
String s="23";
Integer i=new Integer(s);//手动装箱   Integer i=new Integer("23");
//写法2
Integer k=Integer.valueOf(s); 

//包装类转换成String类
Integer b = 12;//直接装箱成包装类
//写法1
String s1=b.toString();
//写法2
String s2=b + "";
//写法3
String s3=Integer.toString(12); 直接以参数的形式传入

3.String类和基本数据类型之间的转换。

//基本数据类型转换成String 
double d = 14.5;
//方法1
String s1 = String.valueOf(doubleValue);//String s1 = String.valueOf(14.5);
//方法2
String s2 = doubleValue + "";//String s2 = 14.5 + "";

//String转换成基本类型
String s = "14.5";
double d1 = Double.parseDouble(str2) ;//用包装类的方法转换,这里拆箱了。
double d2 = new Double("14.5");//转成包装类后,再自动拆箱(使用构造方法)

上面这些是根据一些博客整理的,但是总感觉没有头绪和规律。

查阅API后的再理解:

  以Integer包装类API为例(自动装箱和自动拆箱代码上很简单,主要分析手动模式,以深入底层)
图片说明
  两个构造方法,分别使得,传入一个字符串和基础数据类型int,都能转换成包装类。
这里就完成了:基础数据类型-->>包装类String类-->>包装类


  这个是拆箱,返回值是基础数据类型int:包装类-->>基础数据类型
图片说明


  将字符串转换成基础数据类型int,实际上调用的是Integer类的方法,因此准确来说完成了:String类-->>包装类-->>基础数据类型
图片说明


  传入基础数据类型,返回String,利用包装类完成了:基础数据类型-->>包装类-->>String类
或者是直接调用包装类的toStirng,完成:包装类-->>String类


  两个valueOf,一个将基础数据类型int转换成Integer,一个将传入的字符串转换成Integer,
完成了:基础数据类型-->>包装类String类-->>包装类
图片说明


  分析了API文档,发现在基础数据类型和Sting类的互相转换中,可以以包装类为桥梁,那么考虑到不使用桥梁,如何转变,这里就查阅了一下String类的API。下面这个是String类中的方法,之前的全是Integer
这里只截取了一部分API文档,可以看到传入基础数据类型是返回成String的.
这里完成了:基础数据类型-->>String类
图片说明


  String类的API中没有直接转换成基础数据类型的方法,所以需要用包装类中转。
String类-->>基础数据类型实际上变成了String类-->>包装类-->>基础数据类型


总结:主要是对一些API方法做总结,而像数组加空格转变成字符串这种骚操作不做总结。所以严格来看,没有直接将String变成基础数据类型的方法,用到了包装类进行过度。

  • 有1种String到基础数据类型使用包装类过渡 1.Interger类的parseInt(String)
  • 有2种String到包装类的转换方法。1.构造器方法传参2.Integer类的valueOf(String)
  • 有2种基础数据类型到包装类的方法。1.构造器方法传参2.Integer类的valueOf(int)
  • 有2种基础类型到String 1.使用的是String类的valueOf(int)2.Integer类的toString()使用了包装类过渡
  • 有1种包装类到基础数据类型的方法 1.使用的是Integer的intvalue()
  • 有1种包装类到String类的转换方法 1.Integer类的toString(int)
    总结可能有不到位的地方,恳请大家批评指正。
杂记 文章被收录于专栏

记录日常中碰到的一些疑难杂症

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-20 16:14
已编辑
不止遇到一次了,什么都不会,让提合并请求,问什么是合并请求。让gitlab.页面把测试截图附上,不知道截图要放在哪,那么大的编辑看不到吗让配开发机,问ip是什么东西……这都咋进来的啊,我们(我2023年毕业)那会儿没AI的时候面试都是直接linux,docker,k8s,git,结构与算法,计网。怎么才过去2年,实习生跟傻子一样,有些问题问的我难受,不会git commit,不会git pull,不会切换分支,直接要覆盖master....————而且态度非常敷衍,3天前给开个仓库权限,连本地都没有拉下来。让写一个小文档,都是说一句,写一句,说把目录加上,挺嗤之以鼻,最后还是把目录加上了😂😂任何文档和注释都是方便后来人的,现在的人真的很自负啊,打开github看看任何一个开源项目的文档和注释,都写的很详细。难道现在的同学在校期间不经常拉开源项目看源码学习吗? 哪怕是一个swap函数,开源项目里都经常注释:1 3 5 7 9 2 4 6 8 10^           ^l              rswap:{功能描述}{使用样例}————给我气笑了,没次问我有什么任务的时候,我都是说,优先你学校导师的项目,然后再做公司需求。然后给了两个需求,一个月内搞定就行,既然是agent开发,1. 部署需要维护项目的开发环境2.阅读opencode/openclaude代码(我个人感觉龙虾的源码agent部分很常规,就一个channel+agent,还不如看claude泄露的代码和opencode)然后任务1搞了几周说因为环境问题,他申请到的远程开发机是linux,装的python2,项目是py3的,所以没搭建,我说你不行就用conda或docker把环境屏蔽了呢,没搭理我。任务2:看了很长时间代码,给我回了一句,opencode和openclaude是用go写的……我说你打开github看右下角那的语言是ts还是go…… 结果满脸懵的说ts是什么……我让看agent loop,哪怕全局搜索一下while(true),跳过去从头看到尾就大致清楚了,压根没看。————嘻嘻,我已经开始做社招简历了。
redf1sh:默认会git结果发现真不会,这种一看就是没做过项目的,真做过项目的至少会提交
点赞 评论 收藏
分享
想做乐观锁:都不用AI,咱们都古法编程吧,让节奏慢一点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务