2015-12-06 1 views
0

Я уже несколько раз пытался попробовать что-то в Android Studio, и следующий фрагмент кода работал без ошибки компилятора или времени выполнения и дал правильный ответ.Android Studio (Java). Метод setset теперь работает со смешанными параметрами

cmessage1.setText(AppData.hcptotal + 2.3/7 + " HCP"); 

Appdata.hcptotal представляет собой целое число со значением 10. текст отображается в 10,32857142857143 НСР поэтому этот метод SetText это позволяет целые числа и парном быть смешаны вместе, и участвовать в математических расчетах и ​​смешивают со строками ! Я не знал, что это возможно. Официальная документация не показывает, что это разрешено. И другие сообщения на этом сайте указывают, что параметр метода the.setText должен быть строкой.

Может ли кто-нибудь пролить свет на этот необычайно универсальный (и новый?) Объект?

+0

Параметр становится строкой перед передачей методу. 'int' становится' Integer' через autoboxing, тогда вызывается toString(). Это очень распространено в java. – csmckelvey

+0

Поскольку у вас есть строки в вашем выражении, результат тоже будет строкой, это не что-то, что связано с андроид-студией, это связано с тем, что конкатенация строк работает именно так. – dtx12

+0

Я не понимаю, dtx12. Вы говорите, потому что в выражении есть строка, которая позволяет объединить строку с результатом вычисления с плавающей запятой. Вы говорите, что если я удалю + «HCP», это не сработает? –

ответ

0

Метод setText() допускает параметр переменной CharSequence. CharSequence - произвольный тип переменной. Таким образом, это могут быть Double, String, Float и т. Д., Но метод автоматически преобразует эти значения в одну переменную CharSequence (CharSequence VS String in Java). В значительной степени, когда вы смешиваете все эти несколько типов переменных вместе в этом методе, он автоматически считает, что это CharSequence.

+0

Спасибо, Mekkah08. Я бы это понял, если параметр был 0.333 + «HCP» и что он превратил 0.333 в «0.333». Но это выходит за рамки этого, принимая вычисления с плавающей точкой, оценивая это, а затем преобразовывая ответ в строку. Я также попытался удалить + «HCP». Когда я это делаю, я получаю ошибку компилятора «Невозможно разрешить метод setText (double)». Это поддерживает утверждение dtx12 о том, что оно работает так, как оно есть, потому что в параметре есть строка. Он работает, если параметр является сложным математическим выражением, если вы добавляете к нему + "". Довольно удивительно. –

+0

И еще я обнаружил, что если x является целым числом, а y является двойным, то: –

+0

Собственно, снова посмотрите на свое заявление о коде, которое довольно УДИВИТЕЛЬНО. Вынимая строку «HCP» в поле параметра метода, кажется, что она не удовлетворяет условию наличия в поле параметров наименьшей строки. – Mekkah08

Смежные вопросы