Автоупаковка/распаковывание Java не идет до степени, чтобы позволить Вам разыменовывать примитив, таким образом, Ваш компилятор предотвращает его. Ваш компилятор все еще знает myInt
как примитив. Существует статья об этой проблеме в jcp.org .
Автоупаковка главным образом полезна во время присвоения или передачи параметров - разрешение Вам передать примитив как объект (или наоборот) или присвоить примитив объекту (или наоборот).
Поэтому, к сожалению, необходимо было бы сделать это как это: (престижность Patrick, я переключился на Ваш путь)
Integer.toString(myInt);
Так же на том, что сказал Justin, но необходимо сделать это вместо этого:
Integer.toString(myInt);
Это сохраняет выделение или два и более читаемо.
Еще один способ сделать это состоит в том, чтобы использовать:
String.valueOf(myInt);
Этот метод перегружается для каждого типа примитива и Object
. Таким образом, Вы не должны даже думать о типе, который Вы используете. Реализации метода назовут соответствующий метод данного типа для Вас, например, Integer.toString(myInt)
.
См. http://java.sun.com/javase/6/docs/api/java/lang/String.html .
походит на недостаток спецификации мне
существует больше недостатков, и это - тонкая тема. Проверьте это :
public class methodOverloading{
public static void hello(Integer x){
System.out.println("Integer");
}
public static void hello(long x){
System.out.println("long");
}
public static void main(String[] args){
int i = 5;
hello(i);
}
}
Здесь "долго" печатался бы (не проверили его самостоятельно), потому что компилятор choses расширяющийся по автоупаковке. Будьте осторожны при использовании автоупаковки или не используйте ее вообще!
Допустимый синтаксис, самый близкий к Вашему примеру,
((Integer) myInt).toString();
, Когда компилятор заканчивается, это эквивалентно
Integer.valueOf(myInt).toString();
Однако, это не работает, а также стандартное использование, String.valueOf(myInt)
, потому что, кроме особых случаев, это создает новый Целочисленный экземпляр, тогда сразу выбрасывает его, приводя к более ненужному мусору. (Маленький диапазон целых чисел кэшируется, и доступ доступом к массиву.), Возможно, разработчики языка хотели препятствовать этому использованию по причинам производительности.
Редактирование: я ценил бы его, если downvoter (s) прокомментирует о том, почему это не полезно.
В C# целые числа не являются ни ссылочными типами, и при этом они не должны быть упакованы для ToString () , чтобы быть названными. Они продуманные объекты в Платформе (как ValueType, таким образом, у них есть семантика значения), как бы то ни было. В CLR методы на примитивах называют, "косвенно" загружая их на стек (ldind).
Как все отмечали, автобокс позволяет упростить некоторый код, но нельзя делать вид, что примитивы - это сложные типы.
Также интересно: "автобокс - это взлом на уровне компилятора" на Java. В основном автобокс - это странный кладж, добавляемый в Java. Посмотрите на этот пост, чтобы узнать больше о том, насколько он странный.