2017-07-27 61 views
5

Dlaczego nie możemy przekazać wartość char jako argument do dowolnej metody, która akceptuje parametr short, natomiast możemy przekazać wartość char innego sposobu, który parametr jest int typu? Dlaczego odlewanie typów nie ma miejsca od char do short, biorąc pod uwagę, że rozmiary są równe? Mam nadzieję, że short może przechowywać tak wiele wartości, jak short.Rodzaj odlewania w Javie z char do krótkiej

+4

Naprawiłem większość pytań, aby lepiej czytać po angielsku, ale nie rozumiałem ostatniego zdania: "Mam nadzieję, że krótkie może również przechowywać wystarczająco dużo wartości, jak to jest wymagane w przypadku krótkiego", więc zostawiłem to jako to było ... –

Odpowiedz

13

Dlaczego nie możemy przekazać wartość char jako argument do dowolnej metody, która przyjmuje parametr short

Ponieważ nie ma niejawna konwersja z char do short w kontekście wywołania.

natomiast możemy przekazać wartość innego sposobu, który parametr jest int typu char?

To dlatego, że tam jest niejawna konwersja dostępny od char do int w kontekście wywołania.

Dlaczego wpisać odlewania nie odbywają się od char do short, biorąc pod uwagę, że rozmiary są równe? Mam nadzieję, że short może przechowywać tak wiele wartości, jak short.

Chociaż char i short są takie same rozmiar, char jest niepodpisany natomiast short jest podpisany. Dlatego nie ma żadnej niejawnej konwersji z char do short.

Konwersja z char do int jest poszerzenie prymitywny konwersji (JLS 5.1.2), podczas konwersji z char do short jest zwężenie prymitywny konwersji (JLS 5.1.3). W szczególności (kopalnia nacisk)

Konwersja zwężenia karbonizatu integralną typu T również po prostu odrzuca wszystko ale najniższe bity rzędu n, gdzie n jest liczbą bitów stosowanych do reprezentowania typu T. w oprócz możliwej utraty informacji o wielkości wartości liczbowej, może to spowodować, że wynikowa wartość będzie liczbą ujemną, mimo że znaki oznaczają 16-bitowe liczby całkowite bez znaku.

6

specyfikacji Java mówi:

Ponadto, jeśli ekspresja jest stała wyrażenie (§15.28) typu bajtu krótki char lub int:

Przewężenie prymitywny Konwersja może być użyta, jeśli typ zmiennej to bajt, short lub char, a wartość stałego wyrażenia jest reprezentowana w typie zmiennej.

Char ma wartość minimalną 0 i maksymalną wartość 65 535.

Krótkie ma wartość minimalną -32 768 i maksymalną wartość 32 767.

Wartość Integer ma wartość minimalną -2,147,483,648 i maksymalną wartość 2 147 483 647.

Więc znak może pasować do liczby całkowitej, ale nie krótki, dlatego powinieneś zapewnić java, że ​​chcesz zrobić tutaj typecast.

+0

zarówno krótkie, jak i całkowite mogą zawierać znak i niepodpisane wartości, ale w przypadku liczby całkowitej, ale nie w krótkim czasie, następuje rzutowanie. –

+0

Tak. Char ma wartość minimalną 0 i maksymalną wartość 65.535. Krótkie ma wartość minimalną -32 768 i maksymalną wartość 32 767. Integer ma wartość minimalną -2,147,483,648 i maksymalną wartość 2 147 483 647. Więc znak może pasować do liczby całkowitej, ale nie do skrótu. – Max

+0

tak ... Mam to. Thank wiele –