Java Utf8的字符串转换

Java Utf8的字符串转换,java,string,utf-8,Java,String,Utf 8,这里,record是org.apache.avro.genericord。在我的例子中,它返回utf8。我需要绳子。所以我发现了可能性 record.get("key") 以上两项工作 record.get("key").toString() - I prefer cast than this method record.get("key")+"" - It calls string concatenation method 以上两种方法都不起作用 我的疑

这里,
record
org.apache.avro.genericord
。在我的例子中,它返回
utf8
。我需要绳子。所以我发现了可能性

   record.get("key")
以上两项工作

   record.get("key").toString() - I prefer cast than this method
   record.get("key")+""         - It calls string concatenation method 
以上两种方法都不起作用


我的疑问是,在我的场景中,哪一个在性能方面优于
toString()
+

您还有另一个选项String.valueOf(record.get(“key”)不要直接使用record.get(“key”).toString(),因为获取NullPointerException可能会发生变化

接近差

record.get(“key”)+”
使用StringBuilder创建结果字符串

String.valueOf(record.get(“key”))
只调用一个静态的String方法来获取对象的字符串版本

toString()
工作得更好

当您使用
+
运算符时,它将比较两个对象的类型以执行操作。例如,如果它是一个数字的两种类型,它将把这两种类型相加,但如果它是不同类型的,它将只调用对象的
toString()
,并对字符串进行concat

使用
toString()
获取NullPointerException的几率很高。
您可能需要使用
String.valueOf(record.get(“key”)

最大的问题不是
record
是什么,而是
record.get(“key”)返回。你得到了一个对象,但具体是什么类型的?很明显,这不是一根弦,否则你的演员阵容就行了。找出它是什么,例如通过
objecto=record.get(“key”);System.out.println(o.getClass().getName())(或更简单,查看/发布ClassCastException)。除非您知道ist总是什么类型,否则除了
toString()
之外,您没有太多选择。哦,顺便说一句:您的第二次尝试也只是隐式地调用了toString。第二次尝试与:
record.get(“key”).toString()+“
,这反过来应该使用StringBuilder来构建字符串。所以,第一个应该更好。@FlorianSchaetz我已经告诉过从utf8转换。所以它返回utf8。在我提到的问题中,记录是
genericord
。您有什么疑问?
toString()
是惯用的选择,可读性更高。在这种情况下,只有当您能够将这段代码识别为应用程序中的瓶颈(可能不是瓶颈)时,您才应该担心性能。是的。我面临这个问题<如果结果为空,则code>valuOf
返回“null”。否则,它与
toString()
   (String)record.get("key") - Obviously it throws a classcastexception.
   new String(record.get("key")) - new String(Object) is undefined.