내가 방법이 있다면
void f(byte b);
캐스팅하지 않고 숫자 인수로 어떻게 호출 할 수 있습니까?
f(0);
오류가 발생합니다.
답변
당신은 할 수 없습니다. 기본 숫자 상수는 정수 (또는 “L”뒤에 오는 경우 긴 정수)로 간주되므로이를 바이트로 명시 적으로 다운 캐스트하여 매개 변수로 전달해야합니다. 내가 아는 한 바로 가기가 없습니다.
답변
당신은 캐스팅해야합니다.
f((byte)0);
실행 시간 대신 컴파일 타임에 적절한 변환을 수행 하므로 실제로 성능 저하를 초래하지는 않습니다. 그것은 단지 불편합니다 🙁
답변
자바에서 바이트 리터럴을 사용할 수 있습니다.
byte f = 0;
f = 0xa;
0xa
(int literal)은 자동으로 바이트로 캐스트됩니다. 실제 바이트 리터럴이 아니지만 (아래 JLS 및 주석 참조) 오리처럼 cks 경우 오리라고 부릅니다.
당신이 할 수없는 것은 이것입니다 :
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
다음과 같이 캐스팅해야합니다.
foo( (byte) 0xa );
그러나 이것들은 모두 컴파일되고 “바이트 리터럴”을 사용한다는 것을 명심하십시오.
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
물론 이것도 컴파일
foo( (byte) 1 ); //compiles
답변
코드에 리터럴을 전달하는 경우 단순히 미리 선언하지 못하는 이유는 무엇입니까?
byte b = 0; //Set to desired value.
f(b);
답변
메소드를 재정의하는 것은 어떻습니까?
void f(int value)
{
f((byte)value);
}
이것은 허용합니다 f(0)
답변
Java 7 이상 버전에서는 다음과 같이 바이트 리터럴을 지정할 수 있습니다.
byte aByte = (byte)0b00100001;
참조 : http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html