답변:
당신은 할 수 없습니다. 기본 숫자 상수는 정수 (또는 "L"뒤에 오는 경우 긴 정수)로 간주되므로이를 바이트로 명시 적으로 다운 캐스트하여 매개 변수로 전달해야합니다. 내가 아는 한 바로 가기가 없습니다.
byte b(int i) { return (byte) i; }
하고 정적으로 가져올 수 있습니다. 그런 다음 f (b (10))를 쓸 수 있습니다.
당신은 캐스팅해야합니다.
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
1
int 리터럴이지만 double d = 1;
잘 컴파일됩니다.
byte b(int i){}
한 다음 b(1)
보다 길고 덜 까다 롭습니다 f=1
.
코드에 리터럴을 전달하는 경우 단순히 미리 선언하지 못하는 이유는 무엇입니까?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
불확실한 부호 확장 버그를 얻지 않기를 원했습니다 .
메소드를 재정의하는 것은 어떻습니까?
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