Java 包装类,通过构造函数中的字符串参数创建对象时功能上的差异?
就包装类的实例而言,与Java 包装类,通过构造函数中的字符串参数创建对象时功能上的差异?,java,string,integer,wrapper,Java,String,Integer,Wrapper,就包装类的实例而言,与int、double等相比,通过构造函数中的字符串创建实例时,实例的行为是否有所不同 例如,在以下方面是否存在差异: Integer wrapperInt= new Integer(33); Integer wrapperInt2= new Integer("33"); 不,没有。两个实例都表示整数33。如果有差异,它将被写在javadoc中 请注意,您应该更倾向于使用factory方法: Integer i = Integer.valueOf(33); i = Int
int
、double
等相比,通过构造函数中的字符串创建实例时,实例的行为是否有所不同
例如,在以下方面是否存在差异:
Integer wrapperInt= new Integer(33);
Integer wrapperInt2= new Integer("33");
不,没有。两个实例都表示整数33。如果有差异,它将被写在javadoc中
请注意,您应该更倾向于使用factory方法:
Integer i = Integer.valueOf(33);
i = Integer.valueOf("33");
不,没有。两个实例都表示整数33。如果有差异,它将被写在javadoc中
请注意,您应该更倾向于使用factory方法:
Integer i = Integer.valueOf(33);
i = Integer.valueOf("33");
最终结果将是相同的-您将有一个值为33
的Integer
对象
如果无法解析输入字符串,则采用字符串的版本将抛出NumberFormatException
注意:不需要编写像Integer wrapperInt=newinteger(33)这样的语句代码>。让编译器为您执行此操作(自动装箱):
如果出于某种原因,您不想使用自动装箱,则至少使用Integer.valueOf(…)
而不是使用构造函数:
Integer wrapperInt = Integer.valueOf(33);
这样效率更高;valueOf
方法可以返回一个缓存对象(这样就不必创建新的Integer
对象)。最终结果将是相同的-您将有一个Integer
对象,其值为33
如果无法解析输入字符串,则采用字符串的版本将抛出NumberFormatException
注意:不需要编写像Integer wrapperInt=newinteger(33)这样的语句代码>。让编译器为您执行此操作(自动装箱):
如果出于某种原因,您不想使用自动装箱,则至少使用Integer.valueOf(…)
而不是使用构造函数:
Integer wrapperInt = Integer.valueOf(33);
这样效率更高;valueOf
方法可以返回缓存对象(这样就不必创建新的Integer
对象)。唯一的区别是,在第二种方法中,您将不必要地创建一个string对象,它将尝试解析您传递给构造函数的字符串,如果无法解析字符串,则会抛出NumberFormatException。唯一的区别是,在第二种方法中,您将不必要地创建一个string对象,它将尝试解析您传递给构造函数的字符串,如果无法解析字符串,则会抛出NumberFormatException。答案是是的,两个语法之间可能存在差异。具体来说,语法
new Integer(33);
new Integer("33");
结果值33被编译器解释为整数常量,并作为文本存储在代码中。相比之下,语法
new Integer(33);
new Integer("33");
结果调用,该调用通过Integer.parseInt(s,10)
路由字符串值。如果所讨论的值具有前导零字符,则这一点很重要;对于int
literal,编译器将把literal计算为八进制:
new Integer(010); // equals 8
相反,字符串构造函数将始终以10为基数计算值:
new Integer("010"); // equals 10
在任何情况下,您几乎应该始终使用Integer.valueOf()
,因为它通常效率更高。答案是是的,两个语法之间可能存在差异。具体来说,语法
new Integer(33);
new Integer("33");
结果值33被编译器解释为整数常量,并作为文本存储在代码中。相比之下,语法
new Integer(33);
new Integer("33");
结果调用,该调用通过Integer.parseInt(s,10)
路由字符串值。如果所讨论的值具有前导零字符,则这一点很重要;对于int
literal,编译器将把literal计算为八进制:
new Integer(010); // equals 8
相反,字符串构造函数将始终以10为基数计算值:
new Integer("010"); // equals 10
在任何情况下,您几乎应该始终使用Integer.valueOf()
,因为它通常效率更高。为什么要这样做?你期望有什么不同的功能?你期望有什么不同?你不能检查JDK源代码吗?你所说的JDK源代码是什么意思?(例如)为什么要这样做?你期望有什么不同的功能?你期望有什么不同?你不能检查JDK源代码吗?你所说的JDK源代码是什么意思?(例如)对33正确,但在一般情况下不正确;有一个涉及八进制的边缘案件,你说的“涉及八进制的边缘案件”是什么意思?请解释。对33正确,但在一般情况下不正确;有一个涉及八进制的边缘案件,你说的“涉及八进制的边缘案件”是什么意思?请解释。阅读问题。问题不是“这些构造函数做同样的事情吗”。很明显,它们不是,因为一个接受int,另一个接受字符串。问题是:“实例的行为是否不同?”?答案是否定的:一个整数,无论是用一个构造函数还是另一个构造函数创建的,其行为都是相同的。问题不是“这些构造函数做同样的事情吗”。很明显,它们不是,因为一个接受int,另一个接受字符串。问题是:“实例的行为是否不同?”?答案是否定的:一个整数,无论是用一个构造函数还是另一个构造函数创建的,其行为方式都是一样的。