Java String.valueOf()和新字符串()之间的差异

Java String.valueOf()和新字符串()之间的差异,java,string,Java,String,String.valueOf()和new String()之间有什么区别?你什么时候会用一个来代替另一个 例1: public String fun(){ int foo = 55; return String.valueOf(foo); } 例2: public String fun(){ int foo = 55; return new String(foo); } 更新:是的,第二个例子并不像下面其他人指出的那样编译。我没有意识到这一点,因为我一直在使用新字符串(“some

String.valueOf()和new String()之间有什么区别?你什么时候会用一个来代替另一个

例1:

public String fun(){

 int foo = 55;
 return String.valueOf(foo);

}
例2:

public String fun(){

int foo = 55;
return new String(foo);

}

更新:是的,第二个例子并不像下面其他人指出的那样编译。我没有意识到这一点,因为我一直在使用新字符串(“something”+foo),正如fastcodejava所指出的那样,它已经工作了。那么,如果我使用新字符串(“something”+foo)或String.valueOf(foo),两者之间有区别吗

第一个方法尝试将类型转换为字符串,并使用该值创建一个新字符串。 第二种方法是一个构造函数,它只是用类似字符串的格式创建一个新字符串(不是整数->字符串意义上的类型转换)


因此注释是正确的…它不编译:)

第一个方法获取一个整数并将其转换为字符串。
但是,第二个方法只是创建String类型的新对象的构造函数。它不能接受整数作为参数。

没有接受单个整数的构造函数

  • 字符串(字节[]字节)
  • String(char[]值)
  • String(字符串原件)
  • String(StringBuffer缓冲区)
  • String(StringBuilder)
你应使用:

Integer.toString(foo);

在示例2中,它应该是

return new String(Integer.toString(foo));

你的一个没有编译。因此,无需考虑它们之间的差异,它们采用不同的参数。

第二个代码甚至不会编译。但如果您确实
返回了新字符串(“+foo”),它会。奇怪的是,下面的代码段产生了不同的结果。在处理Base64编码字节[]时,似乎存在一些差异

不正确:

byte[] bytesArray = new byte[(int) a_imageFile.length()];
FileInputStream fis= new FileInputStream(a_imageFile);
fis.read(bytesArray);
byte[] encoded = Base64.getEncoder().encode(bytesArray);            
result = "data:image/jpg;base64,"+ String.valueOf(encoded);
正确:

...
result = "data:image/jpg;base64,"+ new String(encoded);

除了其他人给出的点之外,我看不出String.valueOf()和new String()之间有什么区别,因为我看到他们都在创建一个新的String对象。 我试着用-

    char[] chars = {'c','a','t'};
    System.out.println(String.valueOf(chars) == String.valueOf(chars));
    System.out.println(new String(chars) == new String(chars));
两者都给出了false,表示两者都是不同的字符串对象。

所以我看不到任何性能或内存消耗差异。

第二个示例没有编译。另一个选择是
Integer.toString(foo)
谁在乎呢?它们做同样的事情,都创建了一个字符串对象来返回。真的吗?对这个问题投了3票反对票?我通过更新问题解释了我的困惑根源。无论什么至少我现在清楚了,我明白了。我一直在使用新的字符串(“something”+foo),它很有效,所以你的答案非常清楚。非常感谢。这是一个非常糟糕的Java建议-它创建了两个不必要的对象,没有必要使用新字符串(“+foo”);“”+foo本身已经是一个新字符串。new是多余的,您只需
返回Integer.toString(foo)