[java] Java에서 바이트 리터럴을 어떻게 지정합니까?

내가 방법이 있다면

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


답변