Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String类和其他包装器类的valueOf()方法_Java - Fatal编程技术网

Java String类和其他包装器类的valueOf()方法

Java String类和其他包装器类的valueOf()方法,java,Java,上面的print语句prints false,当分别使用Integer和Long类valueOf()方法时,原因很明显,这两个对象(Integer和Long)具有不同的类型,因此它们不相等 但是,如果将整数值1和长值1l传递给字符串类的valueOf()方法,则我的print语句将输出true System.out.println( Integer.valueOf(1).equals(Long.valueOf(1)) ); // false 我无法理解他们之间的确切区别 我需要对此进行解释

上面的print语句prints false,当分别使用
Integer
Long
valueOf()
方法时,原因很明显,这两个对象(
Integer
Long
)具有不同的类型,因此它们不相等

但是,如果将整数值1长值1l传递给字符串类的
valueOf()
方法,则我的print语句将输出true

System.out.println( Integer.valueOf(1).equals(Long.valueOf(1)) );   // false
我无法理解他们之间的确切区别

我需要对此进行解释。

正如您所说,
Integer
Long
不同的类型,因此
equals
返回false

但是,当比较两个
字符串时,如果值相同(即),
等于
返回


Long
Integer
String
的转换由其表示的数字决定
Integer
1和
Long
1具有相同的数字,因此将两者转换为
String
会得到相同的结果(
“1”
)。

答案在于实现:

您不需要输入
if
语句,因为它们的类型不同


在第二个版本中,您得到的是
true
,因为。。1在字符串表示法中是相同的。

很简单,数字1的
字符串表示法与检索该值的方法无关。
valueOf
方法被重写以处理整数和长整数


你的第一个实验和第二个实验根本不可比。

简单;不管数字1是来自int、long、byte还是其他字符串,String.valueOf(1)->“1”。所以您运行的是System.out.println(“1”。等于(“1”)),这是正确的。

这是因为在Java中有特定的后缀,用于long(1L)、float(1.4f)和double(-3.123d)

如果没有任何后缀,例如1234,则假定其为int。如果其为例如3.1234,则假定其为double

后缀是大写还是小写并不重要

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
是的,因为
Integer.ValueOf(1)
会产生一个
Integer
实例,而
Integer.equals(Object)
期望
对象也是一个
Integer
类型

Integer.valueOf(1).equals(Long.valueOf(1)) // false
结果是正确的,因为
String.valueOf(1)
String.valueOf(1l)
都会生成一个表示数字的字符串,该字符串用普通数字字符表示。例如:

 String.valueOf(1).equals(String.valueOf(1l)) // true

阅读javadoc。两者都返回相同的字符串:“1”。“1”等于“1”。因为
(int)1
(long)1
的字符串表示形式相等。还有
((int)1)==((long)1))
 String.valueOf(1).equals(String.valueOf(1l)) // true
String.valueOf(12335454654465421L); will result in "12335454654465421"