String word = "coding";
/*first way*/
byte[] code = word.getBytes();
/*second way*/
byte[] code2 = String.getBytes(word);
有人可以解释一下为什么我不能用第二种方式声明我的字节数组。 两个人之间有什么区别?
答案 0 :(得分:2)
有人可以解释一下为什么我不能用第二种方式声明我的字节数组吗?
您不能使用第二种方式,因为getBytes
类中没有名称为String
的静态方法。
但如果第二种方式是必要的,你可以编写自己的变体:
public static byte[] getBytes(String s) {
return s.getBytes();
}
其中两个有什么区别?
instance.getBytes()
存在,是一种非静态方法,不带任何参数String.getBytes(String s)
是static
方法,需要1 String
个参数,不存在。您似乎无法理解静态和非静态方法之间的区别。非静态方法只能通过对实例的引用来调用。它们不能被类名使用。例如(getBytes()
是非静态的):
byte[] bytes = instance.getBytes();
byte[] bytes = ClassName.getBytess();
静态方法可以与名称类和实例引用一起使用。最后一个在概念上是错误的,你应该避免这种情况。
例如(getBytes()
是static
):
byte[] bytes = instance.getBytes(); // think twice before use
byte[] bytes = ClassName.getBytess();
但静态getBytes()
的调用看起来很奇怪,不是吗?静态上下文对实例变量一无所知,也没有关于源获取字节的信息。
答案 1 :(得分:0)
概念:您只能直接使用类名调用类的静态成员。但如果它是类的非静态成员,则必须使用引用变量来调用它。
信息: getBytes()
不是String类的静态函数。因此,它只能使用引用变量调用。你可以找到它here!
说明:你的第一种方式是正确的,第二种方式不正确,因为你在这里直接使用类名来调用它。