所以,Java有文字很长型后缀:(123L),双类型后缀(43.21D),浮点后缀(1.234F).那么......为什么没有字节类型后缀?例如,在编写一些测试代码时,必须在将它们用作函数参数时强制转换所有字节.
ByteBuffer b = ByteBuffer.allocate(100);
b.put((byte)3); // super annoying
b.put(3b); // if only
Run Code Online (Sandbox Code Playgroud)
很显然,使用B或b是行不通的,因为它会与指定的十六进制或八进制字节(关键语言功能)的能力相冲突.但是其他一些字母,比如Z z?或Y y(对于bYte)?
根据这个答案,int常量被隐式转换为short类型.
但在我的单元测试中,我想测试一个返回Short的getValue()函数.
assertEquals(obj.getValue(), 42);
Run Code Online (Sandbox Code Playgroud)
显然上面的方法不起作用,所以我尝试使用Short.valueOf
assertEquals(obj.getValue(), Short.valueOf(42));
Run Code Online (Sandbox Code Playgroud)
然而,这仍然抱怨 - 尽管上面提到了隐含的转换 - 所以我必须施展文字.
assertEquals(obj.getValue(), Short.valueOf((short)42));
Run Code Online (Sandbox Code Playgroud)
Short.valueOf((短)5)似乎有点乱!有更干净的方式吗?(新短片("42")同样可怕!)
我有一个接受一个类型参数的方法short.
public void doSomething(short value) {
//DO STUFF
}
Run Code Online (Sandbox Code Playgroud)
我可以这样称呼它:
short value = 3;
doSomething(value);
Run Code Online (Sandbox Code Playgroud)
但不是另一个:
doSomething(3);
Run Code Online (Sandbox Code Playgroud)
为什么?有没有办法表明这个参数是a short而不是int?