Integer.valueOf方法

Integer.valueOf方法

1、在前面的学习里,Integer.valueOf()方法是将字符串类型的对象转换为包装类的对象,怎么在2-16里它似乎又有了新的功能?

2、Integer four=100自动装箱,隐含的应该是:Integer four=new Integer(100);这个步骤。

那么这与Integer.valueOf()方法又有什么关系?

3、同样都是Integer类的对象对比:

Integer one=new Integer(100);

Integer two=new Integer(100);

System.out.println("one==two的结果:"+(one==two));//1

返回false

而:

Integer three=100;//自动装箱

System.out.println("three==100的结果:"+(three==100));//2 自动拆箱

Integer four=100;

System.out.println("three==four的结果:"+(three==four));//3

为什么返回true?

正在回答

登陆购买课程后可参与讨论,去登陆

4回答
  • 鱼儿0001 提问者 #1
    谢谢学友喽!
    2019-06-19 19:15:26
好帮手慕阿满 2019-06-19 17:40:51

同学你好,关于同学的回复:

1、建议同学查看英文版本的,或者同学可以使用在线翻译试着翻译一下。

2、是的,同学理解的不错,继续加油。

祝:学习愉快~

好帮手慕阿满 2019-06-19 11:13:56

关于同学的回复,有如下的回答:

1、Integer包装类中的valueOf是有三个,除了上边提到的,还有一个两个参数的valueOf(String s, int radix),具体的valueof()方法如下:

http://img1.sycdn.imooc.com//climg/5d09a59b0001819714090191.jpg

同学要学会使用api来了解更多:https://docs.oracle.com/javase/8/docs/api/index.html

2、关于第二点,纠正一下,自动装箱操作时,当-128<=参数<=127时,自动装箱使用的是Integer.valueOf(),当参数不在这个范围内,使用的new Integer()的方式完成装箱操作。

3、自动拆箱使用的是intValue()方法。

4、缓存区是Java的一种设计,暂且同学只需要了解,能够使用即可。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    谢谢老师的耐心回复。对于Integer.valueOf()方法,比之前更清楚了。我有几点疑问:1、api有中文的吗,英文的看起来比较吃力,还得查阅英文字典看,自己翻译后估计也会出现错译。2、老师,自动装箱,在-128到127间,我创建了一个包装类对象,存储数值100,符合数值区间范围,缓存区将对象存了。然后我再新建一个包装类对象,存储数值66,问题就在这里。老师,新的包装类对象存的数值可是66不是100,应该不会调用缓存区的对象吧?程序应该会重新调用valueOf方法,然后将存储66数值的新的包装类对象存入缓存区吗?
    2019-06-19 11:53:02
好帮手慕阿满 2019-06-18 15:47:07

同学你好,关于同学的问题有如下回答:

1、Integer.valueOf()方法中的参数如果是String类型的,就是将String类型的对象转换为包装类的对象,如果是int值,就是将int值转换为Integer包装类对象。2-16小节中使用的后一种方式,将int值转换为Integer对象。

2、在底层,自动装箱是使用Integer.valueOf()方法完成装箱操作。

3、关于第三个问题,老师在8:30之后讲解了原因。Java提供了一个缓存区机制,当-128<=参数<=127时,会直接从缓存区查找是否存在这样一个对象,如果存在,则直接产生一个对象,如果没有,则会调用new关键字新建一个对象。100在-128和127之间,所以three和four都是直接从缓存区产生的对象,指向的是同一个对象,所以three==four的比较结果为true,如果一个参数值大于127,比如:Integer  one = 128,Integer two = 128的比较将会返回false,如:

http://img1.sycdn.imooc.com//climg/5d0896f400011e0e07020285.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    谢谢老师的回复。对于老师的回复,我有几点问题:1、包装类的valueOf()方法是不是有两个,一个传的参数是字符串,一个传的是基本数据类型的值,老师这是方法的重载吧,还有没有重载的valueOf方法呢?2、老师,包装类的自动装箱都隐含了Integer.valueOf(传的是基本数据类型的值)方法吗?我之前还以为自动装箱是隐含了new 包装类();.3、老师,自动拆箱隐含的又是什么方法?4、关于我问的第三个问题,视频看了好几遍,也看了老师的回复,感觉还是不能理解,好难啊
    2019-06-18 20:20:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师