封装中parseInt()方法与intValue()方法的返回值有何不同,static int返回值是什么意思
问的问题已经搅和在一起了,建议回看Java基础的入门第二季。
intValue() 是一个实例方法,也就是说实例化之后的对象才能调用。此方法唯一的作用就是用来手动解包。看此方法源代码如下:
public int intValue() { return value; }
作用就是把Integer对象里面的成员变量value的值返回。而即使不用调用这个方法Integer的实例也一样会把value返回。也就是说下面两种写法是完全等价的:
int a = new Integer(2).intValue(); int a = new Integer(2);
而跟parseInt()相对应的其实是Integer的含String参数的构造方法。两者的功能都是把一个字符串转换成一个int数值,结果是一样的,然而实现方法略有不同。看下例:
String s = "200"; int a = new Integer(s); int b = Integer.parseInt(s);
Integer构造方法实现如下:
public Integer(String s) throws NumberFormatException { this.value = parseInt(s, 10); }
parseInt(String)的实现如下:
public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); }
可以看到,两种方法实际上最终都调用了parseInt(s, 10)这个static方法把字符串转换成int数值,不同的是前者是在初始化Integer对象的过程中做了一个初始化赋值的操作(赋值给实例变量value),然后自动把integer对象解包成int数值(完整的转换过程是这样:int a = new Integer(value).intValue(););而parseInt(s)是使用了Integer类的类方法,直接把得到的int数值赋值给b。
而两种方法都调用到的parseInt(s, 10);方法是什么?它也是Integer类的一个类方法,内部一系列转换动作最终返回一个int数值:
public static int parseInt(String s, int radix) throws NumberFormatException { .... }
这也就回到最后一个问题,static int返回值是什么,static int方法返回的就是一个int数值。 static限制的是标记的方法或者变量的作用域。
比如一家人一起去超市买东西,每个成员买完东西最后要把所有的东西统一记账一起结账。设计这种场景时就可以把购物车设置为static,每个实例(人)都可以修改购物车的内容。
给楼上的楼上点赞
楼上讲的很详细嘛