Почему один и тот же фрагмент (простого) кода Java ведет себя по-разному на разных устройствах Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Почему один и тот же фрагмент (простого) кода Java ведет себя по-разному на разных устройствах Android?

Сообщение Anonymous »

Почему один и тот же фрагмент (простого) кода Java ведет себя по-разному на разных устройствах Android?

Этот простой фрагмент кода представляет собой всего лишь использование 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("", "-"));
}
}
Он производит -j-u-s-t-_-a-_-s-t-r-i-n-g- на моем LG Optimus 3D P920 (Android 2.3.3) и Samsung Galaxy моей сестры S2 (Android 4.1.2), и, думаю, на большинстве ваших устройств тоже.

Но он останавливается (подозревается в бесконечном цикле ) на моем LG Optimus Chic (Android 2.2).

Старый LG Optimus Chic и Android 2.2 могут работать с ошибками. (

Код: Выделить всё

String.replace()В 
действительно есть ошибка.) Но фрагмент кода в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Google TTS ведет себя по -разному на разных устройствах [закрыто]
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Google TTS ведет себя по -разному на разных устройствах
    Anonymous » » в форуме Android
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Соединение ORM ведет себя по-разному для двух разных кодов.
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Intellij «Код переформатирования» ведет себя по-разному для конкретной строки кода Java в зависимости от степени выделен
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Intern() ведет себя по-разному в Java 6 и Java 7
    Anonymous » » в форуме JAVA
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»