(Строка) или .toString ()?

Это ваша основная библиотека. Также общее правило для производственного кода, старайтесь избегать использования альфа. Обновите следующие библиотеки, и все будет в порядке.

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.1'
83
задан ROMANIA_engineer 17 December 2015 в 15:02
поделиться

9 ответов

кастинг к Строке является более дешевым, так как это не требует внешнего вызова функции, просто внутренней проверки типа.

67
ответ дан euphoria83 24 November 2019 в 08:51
поделиться

Я использовал бы бросок. Это проверяет Ваше "знание", что это - строка. Если по любой причине Вы заканчиваете с ошибкой, и кто-то передает в чем-то другом, чем строка, я думаю, что было бы лучше выдать исключение (который бросок сделает), чем продолжают выполняться с дефектными данными.

45
ответ дан Jon Skeet 24 November 2019 в 08:51
поделиться

Согласно Глупым размышлениям производительности: x.toString () по сравнению со (Строкой) x

В конце thend результаты удивительно ясны: это по крайней мере вдвое более быстро для кастинга Объекта Представить в виде строки, чем назвать Object.toString ()

34
ответ дан cletus 24 November 2019 в 08:51
поделиться

Если бы Вы знаете, что Объектом o является Строка, я сказал бы, просто бросает его к Строке и осуществляют его тот путь. Вызовом toString () на объекте, который Вы знаете наверняка, является Строка, мог бы просто добавить беспорядок.

Если Объект o мог бы быть чем-нибудь кроме Строки, необходимо будет назвать toString ().

7
ответ дан Andy White 24 November 2019 в 08:51
поделиться

Я не был бы слишком заинтересован производительностью, если эта операция сделана даже всего несколько тысяч раз в секунду - нет никакого материального различия.

Я был бы, однако, заинтересован "знания" входа. У Вас есть метод, который принимает Object и необходимо рассматривать его как таковой, т.е. Вы не должны знать, что что-либо о параметре, кроме него придерживается Object интерфейс, который, оказывается, имеет a toString() метод. В этом случае я настоятельно рекомендовал бы использовать тот метод вместо того, чтобы просто принять что-либо.

OTOH, если вход всегда также String или null, просто измените метод для принятия Strings, и проверка явно на nulls (который необходимо сделать так или иначе, имея дело с непримитивами...),

3
ответ дан Henrik Paul 24 November 2019 в 08:51
поделиться

Если то, что Вы имеете в "o", является Строкой затем нет большой части различия (вероятно, бросок быстрее, но это - вещь реализации VM/Library).

Если "o" не может быть Строка, но он, как предполагается, Строка затем, бросок - то, что Вы хотите (но необходимо заставить метод взять Строку вместо Объекта).

Если "o" мог бы быть каким-либо типом затем, Вы должны использовать toString - но, несомненно, проверите на пустой указатель сначала.

void foo(final Object o)
{
    final String str;

    // without this you would get a class cast exception
    // be wary of using instanceof though - it is usually the wrong thing to do
    if(o instanceof String)
    {
        str = (String)o;
    }    
}

или

void foo(final Object o)
{
    final String str;

    // if you are 100% sure that o is not null then you can get rid of the else
    if(o != null)
    {
        str = o.toString();
    }
}

Я кодировал бы последний как:

void foo(final Object o)
{
    final String str;

    if(o == null)
    {
        throw new IllegalArgumentException("o cannot be null");
    }

    str = o.toString();
}
1
ответ дан TofuBeer 24 November 2019 в 08:51
поделиться

Я нашел странно, что бросок был медленнее, чем vtable поиск, подразумеваемый вызовом tostring.

1
ответ дан Joshua 24 November 2019 в 08:51
поделиться

Учитывая, что ссылочным типом является Объект, и все Объекты имеют toString (), просто называют object.toString (). String.toString () просто возвращает это.

  • toString () является меньшим количеством кода для ввода.
  • toString () является меньшим количеством байт-кода.
  • бросок является дорогой операцией VS полиморфный вызов.
  • состав исполнителей мог перестать работать.
  • Используйте String.valueOf (объект), который просто называет object.toString () если не пустой.
2
ответ дан mP. 24 November 2019 в 08:51
поделиться

В o не может быть 'пустой строки'. Если o является пустым, он не содержит пустую строку, это является просто пустым. Просто проверьте o на пустой указатель сначала. Если Вы бросите или назовете ToString () на пустом указателе, то Вы откажете.

1
ответ дан Ed S. 24 November 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: