Этот простой фрагмент кода представляет собой всего лишь использование String.replace(CharSequence target, замена CharSequence) с target == "":
Код: Выделить всё
package com.example.stringreplacetest;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str = "just_a_string";
System.out.println(str.replace("", "-"));
((TextView) findViewById(R.id.textView)).setText(str.replace("", "-"));
}
}
Но он останавливается (подозревается в бесконечном цикле ) на моем LG Optimus Chic (Android 2.2).
Старый LG Optimus Chic и Android 2.2 могут работать с ошибками. (
Код: Выделить всё
String.replace()В
Разве этот фрагмент кода не должен быть финализирован во время компиляции? Как работает компилятор Java (поскольку я знаю, что Java — кроссплатформенный язык, он может работать по-другому)?
P.S. чтобы убедиться, что это один и тот же фрагмент скомпилированного кода, я фактически перенес скомпилированный .apk через USB на свои телефоны Android, а не использовал Eclipse для их запуска непосредственно на устройствах.
Я нашел исходный код Android 2.2 Froyo:
https://android.googlesource.com/platfo ... tring.java
Это вызывает бесконечный цикл, когда target.length == 0 (потому что в цикле do- while string.indexOf ("", Tail) никогда не вернет -1).
Сомнения немного развеяны. Но...
я до сих пор не знаю, почему загружаются разные версии класса String при запуске на разных устройствах. Именно это и означает кроссплатформенность?
Подробнее здесь: https://stackoverflow.com/questions/165 ... rent-andro