在回答这个问题之前,我们先探究一下另外一个问题:Interger[]数组可以给Number[]数组赋值吗?先看下面这段代码:
public class ArrayErr { public static void main(String[] args) { // 定义一个Integer数组 Integer[] ia = new Integer[5]; // 可以把一个Integer[]数组赋给Number[]变量 Number[] na = ia; // 下面代码编译正常,但运行时会引发ArrayStoreException异常 // 因为0.5并不是Integer na[0] = 0.5; // ① } }
上面代码可以编译通过,但运行会报下面错误:
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Double
at ArrayErr.main(ArrayErr.java:13)
这是一种潜在的风险。在Java的早期设计中,允许Interger[]数组赋值给Number[]数组,这一设计理念是存在缺陷的。一门设计优秀的语言,不仅需要提供强大的功能,而且能提供强大的“错误提示”和“出错警告”,这样才能尽量避免开发者犯错。而Java允许Integer[]数组赋值给Number[]显然不是一种安全的设计。
Java泛型的设计原则是,只要代码在编译时没有出现警告,就不会遇到运行时ClassCastException异常。依据这一设计原则,泛型不认为List<Interger>是List<Number>的子类。下面两行代码证明了这一点。
List<Integer> iList = new ArrayList<>(); // 下面代码导致编译错误 List<Number> nList = iList;
另外我们可以得出更为广义的一个结论:假设Foo是Bar的一个子类型(子类或子接口),那么Foo[]依然是Bar[]的子类型,但G<Foo>不是G<Bar>的子类型。
相关推荐
复杂类型和基本类型的内存模型本质上是不一样的,简单数据类型的存储原理是这样的:所有的简单数据类型不存在“引用”的概念,简单数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而...
这里需要注意,`to_string`函数需要包含`<string>`头文件。 3. 初始化结果变量`result`为0。我们将在这个变量上进行累加,以构建反转后的整数。 4. 遍历字符串`str`的每个字符,计算每个数字的值,然后乘以10的...
2) 关系 =(相当于JAVA中的==) > < <> != ~= ^= <= >= 3) 赋值 := 例子a:=2 4) 连接 || 例: 'abc' || 123 5) 标号 << 需要的标记 >> 6) 注释 --(单行) /* */(段落) 7) 替代 <scape> <tab> <enter> 6. 文字 ...
- `bin_recursive(13)` -> `bin_recursive(6) + '1'` -> `bin_recursive(3) + '1'` -> `bin_recursive(1) + '1'` -> `bin_recursive(0) + '1'` - 因为`bin_recursive(0)`返回空字符串,所以结果是`'1101'`。 递归...
在IT领域,"Rational Interger" 这个术语似乎没有特定的标准定义,但我们可以从其组成部分进行推测。"Rational"通常与有理数有关,而在编程或数学上下文中,有理数指的是可以表示为两个整数比例的数。"Interger" ...
数字类型可以分为三种基本类型:NUMBER、PLS_INTEGER 和 BINARY_INTEGER。 * NUMBER:以十进制格式进行存储,能够描述整数或实数。定义方式为 NUMBER(P,S),P 是精度,最大 38 位,S 是刻度范围, 可以在 -84......
2. 新不等式能够切断原始分数解x*,即αTx* > β。如果不满足这一点,那么添加新不等式将无法帮助我们找到新的最优解,LP松弛问题仍会返回x*。 满足以上条件的不等式被称为整数规划的切割平面。一旦找到了切割平面...
1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public void test(); Code: 0: iconst_1 1: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 4: a...
* File->New->Project->Interger Library * 新建 sch.lib 和 pcb.lib, 在 sch.lib 中选择 Tools->Model Manage.... * Project->Compile Integrated Library ### 其他 * 盲孔(BI) * 选择该元件,按 F1 打开该...
CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 CLKFX_MULTIPLY => 2, -- Can be any integer from 1 to 32 CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature CLKIN...
* input_height:显示设置输入元素的高度,取值应是一个有效的CSS高度字符串,适用于string、number、interger数据类型。 * input_width:显示设置输入元素的宽度,取值应是一个有效的CSS宽度字符串,适用于string、...
61850 模型及报文分析 61850 是 IEC(International Electrotechnical Commission,国际电工委员会)发布的一种智能电网通讯协议标准,用于智能电网中的数据交换和控制。该标准定义了电力系统中的设备之间的通讯...
136_single_number.py # 位操作:异或(xor)操作 x ^ 0 = x; x ^ x = 0 sum 001_two_sum.py # 求list中能加和成指定值的两个位置 015_3_sum**.py # 求list中能加和成0的三个值 数列 004_median_of_two_sorted_arrays....
<%@ language=VBscript%> <% dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=...
题目中指出`interger`不是Java关键字,实际上应该是`integer`,Java的关键字是`int`。 2. 数据类型的转换与赋值:题目中提到的`byte b=256`会产生溢出错误,因为byte的范围是-128到127;`double d=89L`是合法的,...
记录Integer 自动装包拆包代码解析Integer 核心代码IntegerCache 类valueOf方法 Integer 核心代码 1、自动装拆箱 编译前 public static void main(String[]args){ Integer integer=1; //装箱 int i=integer;...
5. **集合框架的顶层接口**:在Java集合框架中,`Collection`接口位于顶层,它是`List`, `Set`, `Queue`等接口的父接口。所以正确答案是B) `Collection`。 6. **char类型的赋值**:Java的`char`类型可以存储单个...
集成库的建立涉及"File-->New-->Project-->Interger Library",并使用"Model Manager"管理模型。 盲孔(Blind Via)是只延伸到一个表层的导通孔,通常用于连接顶层和内层,但不穿透整个PCB,这是在设计多层PCB时...
free interger 等等,所以存这样的应用还是挺合适的。 八、vi property 下 execution 中选项 reetrant execution,选用和不选用有什么区别? 如果主程序执行同一个子 vi,是同时两次或多次执行时,在不选用时,就...
CameraPlacement 使用MATLAB中的Binary Integer Programming的三维相机放置解决方案。 在先前的工作启发下,该程序使用二进制整数编程对AGP(艺廊问题)进行建模,并将其扩展为三个维度,以使其在现实世界中更加实用...