这个来源输出G'Day Mate.这是怎么回事?
public static void main(String args[]) {
System.out.println("Hello World");
}
static {
try {
Field value = String.class.getDeclaredField("value");
value.setAccessible(true);
value.set("Hello World", value.get("G'Day Mate."));
} catch (Exception e) {
throw new AssertionError(e);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们将主要功能更改"Hello World"为new String("Hello World"):
System.out.println(new String("Hello World"));
Run Code Online (Sandbox Code Playgroud)
它输出Hello world.
实际上发生了什么?
以下简单的Java程序似乎通过语句显示字符串Hello World,System.out.println("Hello World");但它没有.它只是用另一个字符串替换它,在这种情况下,美好的一天!并在控制台上显示它.字符串Hello World根本不显示.我们来看看Java中的以下简单代码片段.
package goodday;
import java.lang.reflect.Field;
final public class Main
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
static
{
try
{
Field value = String.class.getDeclaredField("value");
value.setAccessible(true);
value.set("Hello World", value.get("Good Day !!"));
}
catch (Exception e)
{
throw new AssertionError(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里只有一个关于此代码的问题.它完全按预期工作,但我无法减少字符串的好日子!.如果尝试这样做,则会导致a java.lang.ArrayIndexOutOfBoudsException.如果长度增加,程序运行良好但显示字符串中的其余字符被截断意味着两个字符串的长度应该有些相同.为什么?这是我无法理解的事情.