Как остановить Java от автоматического приведения значения char к int? - PullRequest
0 голосов
/ 27 января 2019

компилятор java автоматически преобразует значение char в int, код, подобный этому, не вызовет ошибку:

public void foo(int i){
   // do something
}

char c = 'a';
foo(c);

Есть ли какой-нибудь способ остановить компилятор всегда приводить символы к int или кошибка?

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Вы можете использовать оболочку class типа int в качестве параметра метода, как показано ниже,

public void foo(Integer i){
   // do something
}

char c = 'a';
foo(c);

Это покажет ошибку компиляции.

0 голосов
/ 27 января 2019

Java использует ASCII-код того символа, который вы передали своей функции.

так код ниже:

 char c = 'a';
    foo(c);

public void foo( int i){
    System.out.println(i);
}

будет иметь результат: 97, который является эквивалентным символу в int

.

Кроме того, если выражение [справа] является константным выражением типа byte, short, char или int:

  • Может использоваться сужающее примитивное преобразование, если переменная имеет тип byte, short или char и значение константы выражение представимо в типе переменной.

Вы должны знать, что int - это примитивный тип в Java, но мы можем использовать классы-обертки вместо Integer , Character , ....

, поэтому вы можете использовать:

public void foo( Integer i){
        System.out.println(i);
    }

что он выдаст исключение:

 java: incompatible types: char cannot be converted to java.lang.Integer
0 голосов
/ 27 января 2019

По умолчанию компилятор выполняет расширенное преобразование для упомянутых примитивных типов https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2.

Итак, он автоматически конвертирует char в int.

Вы можете избежать этого, используя Integer в foo. void foo(Integer i)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...