Java String.valueOf()和新字符串()之间的差异
String.valueOf()和new String()之间有什么区别?你什么时候会用一个来代替另一个 例1: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
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)代码>