Возиться с полями класса String с отражением - PullRequest
0 голосов
/ 21 января 2020

Иногда мне нравится связываться с отражением только ради него. Извините, если это слишком широко. Может ли кто-нибудь объяснить мне, какие значения я получаю в этом коде? Это работает на 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...