当前位置: 首页 > 面试题库 >

Java - 简短说明

养昊天
2023-03-14
问题内容

我有以下代码片段。

public static void main(String[] args) {
 short a = 4;
 short b = 5;
 short c = 5 + 4;
 short d = a;
 short e = a + b; // does not compile (expression treated as int)


 short z = 32767;
 short z_ = 32768; // does not compile (out of range)

 test(a);
 test(7); // does not compile (not applicable for arg int)
}

public static void test(short x) { }

以下摘要是否正确(仅针对上面的
简短示例)?

1. 不使用类型转换直接初始化只能使用文字或单个变量(只要该值在声明的类型范围内)
2. 如果作业的rhs使用变量处理表达式,则必须进行强制转换

但是,
考虑到之前的摘要,为什么我确实需要转换第二个方法调用的参数?


问题答案:

这些是相关的JLS部分:

[JLS 5.1.1身份

Conversion](http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.1)

任何类型都允许从类型到相同类型的转换。

[JLS 5.2 Assignment

Conversion](http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.2)

当将表达式的值分配给
变量时,将发生赋值转换:必须将表达式的类型转换为
变量的类型。分配上下文允许使用以下之一:

身份转换
[…]
此外,如果表达式的类型是恒定表达byte,
short,char或int:

如果变量的类型
是byte,short或char,并且常量表达式的值在变量的类型中可表示,则可以使用变窄的原始转换

上述规则解释了以下所有内容:

short a = 4;     // representable constant
short b = 5;     // representable constant
short c = 5 + 4; // representable constant
short d = a;     // identity conversion
short e = a + b; // DOES NOT COMPILE! Result of addition is int

short z  = 32767; // representable constant
short z_ = 32768; // DOES NOT COMPILE! Unrepresentable constant

至于为什么不能编译:

test(7); // DOES NOT COMPILE! There's no test(int) method!

这是因为只为
赋值定义了常量的缩小转换。不用于方法调用,它具有完全不同的规则。

JLS 5.3。方法调用
Conversion

特别是方法调用转换不包括作为
分配转换一部分的整数常量的隐式缩小。
Java编程语言的设计者认为,包括这些
隐式的缩小转换将为
重载的方法匹配解决过程增加额外的复杂性。

我只解释
有效的Java 2nd Edition的第41项:明智地使用重载:

确定选择哪个过载的规则非常
复杂。在语言规范中,它们占据了33页,
并且几乎没有程序员理解它们的所有精妙之处。



 类似资料:
  • 本文向大家介绍请简短说明一下你对AQS的理解。相关面试题,主要包含被问及请简短说明一下你对AQS的理解。时的应答技巧和注意事项,需要的朋友参考一下 考察点:多线程 AQS其实就是一个可以给我们实现锁的框架 内部实现的关键是:先进先出的队列、state状态 定义了内部类ConditionObject 拥有两种线程模式独占模式和共享模式。 在LOCK包中的相关锁(常用的有ReentrantLock、

  • 问题内容: 我需要发送网络订单(我要使用Java编写的游戏服务器的简称)。我读到有关网络订单的信息,但找不到有关在数据发送之前发送的空头的任何详细信息。有人可以向我解释它是什么,以及如何使用Java将其发送给客户端吗? 问题答案: Java NIO字节缓冲区支持更改字节顺序。因此,网络字节顺序为Big Endian。 字节顺序是存储大于单个字节的数值的字节的顺序。有2种口味:Big Endian(

  • 问题内容: 这可能已经在另一篇文章中得到了回答,但是我不明白为什么我的测试Java应用程序(1.7.0_01)无法编译某些内容。 这样编译: 我知道“ a + a”将产生一个整数。这样可以编译: 那为什么不编译呢? 另外,我是否可以假设由于转换为整数而不能在短裤上使用+ =,-=等…?如果可以进行这些操作,有人可以提供示例吗? 编辑1 由于有人建议将它复制为原始类型’short’-Java中的强制

  • 我想在“管理”中产品标题下方的“编辑订单”页面中显示“产品简短说明”。 我对WooCommerce比较陌生,根据我的发现,我相信我应该在订购之前使用动作挂钩 比如: 任何关于如何进一步调整的帮助都将不胜感激

  • 这是一个很简短的教程,可以让你领略 Flux 和 Redux 思想的精髓。当你初次接触 Redux 时,Redux 官方文档极其详尽,是你的首选。本教程不同点是,通过介绍 Redux 使用来向你展示 Flux 概念。如果你想了解更多细节,请参谋 Redux 官方文档。

  • 在WooCommerce中,我试图在购物车项目中添加特定类别的产品简短描述。 我发现这段代码将产品简短描述添加到购物车中的所有产品中,但我不知道如何将其缩小到仅显示在特定产品上: 如何使此代码仅显示已定义产品类别的简短说明? 谢谢