Primitivo curto negativo tem valor incorreto no Android 24
Meu dispositivo Nexus 5X com Android 7.0 (nível 24 da API) tem um comportamento extremamente estranho ao imprimir e comparar os valores deshort
Campos.
public class TestActivity {
public class ShortWrapper {
public short s;
}
public void onCreate(Bundle b) {
// Local short
short s1 = -10;
Log.d(TAG, "Local short (concatenation) = " + s1);
Log.d(TAG, String.format("Local short (String.format) = %d", s1));
if(s1 == -10) Log.d(TAG, "EQUAL"); else Log.d(TAG, "!!! NOT EQUAL !!!");
// Short field
TestActivity.ShortWrapper w = new TestActivity.ShortWrapper();
w.s = -10;
Log.d(TAG, "Short field (concatenation) = " + w.s);
Log.d(TAG, String.format("Short field (String.format) = %d", w.s));
if(w.s == -10) Log.d(TAG, "EQUAL"); else Log.d(TAG, "!!! NOT EQUAL !!!");
}
}
Resultado:
Local short (concatenation) = -10
Local short (String.format) = -10
EQUAL
Short field (concatenation) = 65526 <<<<<<<<< ???
Short field (String.format) = -10
!!! NOT EQUAL !!! <<<<<<<<< ???
Em outro dispositivo Android executando o Android 4.4 e em um emulador do Android 7.0, a saída é diferente, ou seja, conforme o esperado.
Por que o Nexus 5X está lidando de maneira tão estranha com esse campo curto negativo? Isso é um bug da plataforma ou dispositivo?