2016-02-26 1 views
0

Thread.sleep принимает значение long в качестве аргумента для миллисекунд. Но числовые литералы рассматриваются как целые числа, если не указано иное с буквенным обозначением типа 1000L. Так почему же этот действующий код?Java Thread.sleep long или int?

Thread.sleep(1000); 
+1

Целые числа могут быть увеличены до более широкого целочисленного типа. 'long big = 2;' является действительным кодом, 2 - «расширенным» до бесконечности. – markspace

+0

@markspace, почему вы прокомментировали вместо ответа? Если бы вы ответили, я бы принял ваш ответ. – user5859585

ответ

4

Поскольку int может быть повышен до long.

long это большие (более битов), чем int и так int могут быть преобразованы в long без какой-либо потери данных. У другого пути могут быть проблемы, поскольку данные могут быть потеряны - следовательно, это будет ошибка.

3

Это действительное преобразование уширение, смотрите также JLS-5.1.2. Widening Primitive Conversion, который говорит частично

19 конкретных преобразований на примитивных типов называются расширяющиеся примитивные преобразования:

  • int в long, float, или double