Вопрос о Java новичка о Integer.parseInt () и кастинг

таким образом, при кастинге как в операторе ниже:-

int randomNumber=(int) (Math.random()*5)

это вызывает случайное нет. сгенерированный, чтобы быть преобразованным в интервал.

Также существует этот метод, я просто столкнулся с Integer.parseInt (), который делает то же!

т.е. возвратите целое число

Почему два различных способа сделать значение интервалом?

Также я сделал поиск, и он говорит, что parseInt () берет строку в качестве аргумента.. Это означает, что parseInt () ТОЛЬКО для преобразования Строки в целое число?

Что относительно этого кастинга затем (интервал)?? Мы можем использовать это для преобразования строки в интервал также?

извините, если это походит на немой вопрос.. Я просто смущен и пытающийся понять

Справка?

7
задан Serenity 20 May 2010 в 15:57
поделиться

5 ответов

Integer.parseInt не делает то же самое, что и приведение.

Давайте рассмотрим ваш первый пример:

int randomNumber=(int) (Math.random()*5)

Math.random возвращает двойку, а когда вы умножаете двойку на int, Java считает результат двойкой. Таким образом, выражение Math.random()*5 имеет тип double. Вы пытаетесь присвоить это значение переменной типа int. По умолчанию Java не позволит вам присвоить двойное значение переменной типа int без явного указания компилятора, что это можно сделать. В принципе, вы можете думать о преобразовании double в int как о сообщении компилятору: "Я знаю, что эта переменная int не может хранить десятичную часть этого двойного значения, но это нормально, просто усеките его."

Теперь посмотрите на преобразование строки в int:

int value = Integer.parseInt("5");

Строка "5" не сразу преобразуется в целое число. В отличие от двоичных чисел, которые по определению можно преобразовать в целое число, отбросив десятичную часть, строки не могут быть легко или последовательно преобразованы в int. "5", "042" и "1,000" имеют целочисленное представление, а что-то вроде "Hello, World!" - нет. По этой причине в языке нет функции первого порядка для преобразования строки в int. Вместо этого вы используете метод для разбора строки и возврата значения.

Итак, чтобы ответить на все ваши вопросы:

Почему два разных способа превратить значение в int?

Вы должны учитывать тип преобразуемого значения. Если вы конвертируете примитив в int, вы можете использовать приведение, если вы конвертируете объект, вам нужно использовать какой-то метод преобразования, специфичный для этого типа.

Также я поискал, и там сказано, что parseInt() принимает строку в качестве аргумента. Значит ли это, что функция parseInt() предназначена ТОЛЬКО для преобразования строки в целое число?

Правильно. Вы не можете передать любой другой тип в метод parseInt, иначе вы получите ошибку компилятора.

А как насчет приведения (int)? Можем ли мы использовать его для преобразования строки в int?

Нет, приведение к int будет работать только для примитивных значений, а в Java строка не является примитивом.

18
ответ дан 6 December 2019 в 06:35
поделиться

В вашем примере вы приводите число с плавающей точкой к числу int. Integer.parseInt(), однако, считывает целочисленное значение из строки.

4
ответ дан 6 December 2019 в 06:35
поделиться

Вы можете выполнять преобразование только между совместимыми типами (я бы связался с JLS, но это может быть слишком много для вопроса новичка).

Приведение - это просто взять значение и сказать: «Эй, эта штука, которая была двойником? Теперь это целое число. Итак, вот так».

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

3
ответ дан 6 December 2019 в 06:35
поделиться

Приведение может преобразовывать только один числовой тип в другой. Интерпретация строки (или синтаксический анализ) должна выполняться с помощью вызова метода.

1
ответ дан 6 December 2019 в 06:35
поделиться

Давайте начнем с самого начала.

int randomNumber=(int) (Math.random()*5);

Да, это действительно дает случайное целое число от 0 до 4, но это очень не правильный способ. Видите ли, если вы забудете скобку, то есть напечатаете

int notSoRandomNumber=(int) Math.random()*5;

вы всегда получите 0, потому что приведение имеет более высокий приоритет, чем умножение. То есть результат Math.random() сначала превращается в целое число, которое всегда будет равно 0, а затем умножается на 5, которое все равно будет равно 0.

Я бы предпочел использовать java.util.Random для генерации случайных целых чисел. q.v. http://java.sun.com/javase/6/docs/api/java/util/Random.html#nextInt(int).

Кастинг можно делать только между "совместимыми типами". Для примитивных типов и их оберток (т.е. int, Integer, long, Long, &c.) вы можете всегда выполнять приведение между ними с оговоркой, что при некоторых преобразованиях теряется информация. Например, при приведении long к int, long может содержать число большее, чем Integer.MAX_VALUE]. Этот вид приведения Java в основном получила от C++, который, в свою очередь, от C.

Что касается приведения объектов, то здесь все проще. Просто спросите: "Является ли этот объект, o, X?". Если да, то (X) o имеет смысл и имеет статический тип X. Если o не является X и вы все равно пытаетесь выполнить приведение, вы получите исключение ClassCastException, означающее, что динамический (runtime) тип o не совместим с X. Это, вероятно, будет иметь гораздо больше смысла позже, когда вы поймете разницу между статическим и динамическим (runtime) типом объектов.

1
ответ дан 6 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

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