这不是问题,但是我试图在这里理解基本的细微差别。
在构造new String(arg)
为arg
或char[]
的String(使用byte[]
时,我遇到了以下错误:The constructor String(byte[]) is ambiguous
我检查了Java version 8
的String实现,发现了两个构造函数:public String(byte[] data) {
public String(char[] data) {
如果我传递了char[]
,为什么它与带有参数byte[]
的构造函数匹配?
并且如果我传递了byte[]
,为什么它与带有参数char[]
的构造函数匹配?
因为字节大小而匹配吗? (在两种情况下使用UTF-8
编码可能都一样吗?)
编辑1:
这里讨论的arg
是映射HashMap<Serializable,Serializable>()
的一个值,该映射是根据从客户端收到的HttpServletRequest
构建的。
编辑2:
我设法尽可能地重现了它。
此代码有效:
import java.io.Serializable;
public class StringTest {
public static void main(String[] args) {
StringTest t = new StringTest();
System.out.println((String)(t.getParameter("Hello")));
}
@SuppressWarnings("unchecked")
public <T extends Serializable> T getParameter(Serializable key) {
return (T)new String("Hello");
}
}
但这不是:
public class StringTest {
public static void main(String[] args) {
StringTest t = new StringTest();
System.out.println(new String(t.getParameter("Hello")));
}
@SuppressWarnings("unchecked")
public <T extends Serializable> T getParameter(Serializable key) {
return (T)new String("Hello");
}
}