2015-07-27 3 views
4

я встретить вызов метода, который тип параметра является short, напримерВ чем разница между 'short s = 1' и '(short) 1' в Java?

foo (short s){...} 

Когда я назвать это, по-моему из двух раствора:

одно:

foo((short) 1); 

и другое:

short s = 1; 
foo(s); 

В чем разница их, а что лучше?

+1

Я думаю, что метод 'foo()' получит одинаковый ввод в обоих случаях. Я лично предпочитаю вторую версию без литья, потому что ее легче читать. Можем ли мы узнать, почему у вас есть этот вопрос? –

+4

Обе формы эквивалентны (и * в общем случае * вы не должны использовать 'short', см. Http://stackoverflow.com/questions/1615419/what-is-the-reason-for-these-pmd-rules, например) –

+0

@RC. Благодарю. Не знал эту информацию. –

ответ

1

1 будет по умолчанию рассматриваться как int в Java.

Итак, когда вы делаете ((короткий) 1), вы передаете 1 как короткий параметр через функцию. Аргумент приема должен быть коротким.

Принимая во внимание, что если у вас короткий s = 1, то это, очевидно, целое число short.

Помните, что в обоих случаях шорты будут преобразованы в int (это называется продвижение по службе) во время выполнения операций. И, если работает с двойными операндами, эти int's повысятся до double.

В чем разница между ними, а какая лучше?

В обоих случаях выполняются те же операции (передача короткой переменной в качестве аргумента), и обе они одинаково лучше. Но вам следует избегать использования целых чисел short, если это крайне необходимо, поскольку у него есть некоторые недостатки (вызывает ошибки во время компиляции, когда вы случайно пытаетесь сохранить int/long до короткого).

+0

Почему он должен быть преобразован в int при выполнении операций? ... –

+0

Насколько я понимаю, это называется продвижением типа, но почему это будет продвигаться, если метод займет короткий? –

+0

@ hmc_jake - потому что, когда операции выполняются в этом случае, происходит продвижение типа, и все короткие/байтовые/char продвигаются до int. –

1

short s = 1 определяет переменную как short со значением 1. (short) 1 отливает int значение 1 в примитивный тип данных short.

Нет никакой разницы. Они оба создают short со значением 1.

См. Java: Primitive Data Types для получения информации о коротком замыкании и его диапазоне значений, поскольку установка значения, короче значения, которое выше или ниже заданного диапазона, приведет к исключению.

1

Оба решения будут работать, и различия в производительности между ними вряд ли будут заметны.

(short) 1; использует литерал, который передается в короткое замыкание, которое передается как параметр для функции foo.

short s = 1; фактически создает переменную в памяти перед передачей значения в качестве параметра, если вы хотите использовать эту переменную для других целей.

1

В java up cast от short до int автоматически происходит. Но для down casting вам нужно вручную бросить его.

short(integer_value) 
(short) 1 

Если вы вызываете с помощью кастинга, вы также можете отправить целочисленный параметр.