Иногда мне нравится связываться с отражением только ради него. Извините, если это слишком широко. Может ли кто-нибудь объяснить мне, какие значения я получаю в этом коде? Это работает на Android.
private static void test() {
try {
String sVal = "Hello!";
try {
sVal.charAt(6);
} catch (StringIndexOutOfBoundsException ex) {
// This will happen
ex.printStackTrace();
}
Field f = String.class.getDeclaredField("count");
f.setAccessible(true);
f.set(sVal, 10000);
// Now, this won't fail
sVal.charAt(6);
byte[] buffer = sVal.getBytes();
Log.v("Test", "buff.length = " + buffer.length); // buffer.length == 5465 ??
String s = new String(buffer); // buffer now apparently contains random parts of memory
Log.v("Test", "" + s);
} catch (Throwable t) {
t.printStackTrace();
}
}