当我使用Java时,我尝试创建Node类的数组。对于指定大小,我以前使用int,它工作正常,但是当我更改为long时,这给了我编译错误。请检查下面的代码。
public class Simple {
long maxsize = 7657567579l; // it fails when i tried to use value out-of-range of int
Node[] nudes = new Node[maxsize];
public static void main(String[] args) {
Simple simple = new Simple();
}
}
class Node {
public Object data;
public long next;
public Node(Object data, long next) {
super();
this.data = data;
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public long getNext() {
return next;
}
public void setNext(int next) {
this.next = next;
}
}
答案 0 :(得分:2)
因为构造函数采用了int
参数?除了编译错误,您还期望发生什么?您无法创建
array[Integer.MAX_VALUE]
但是您可以:
array[Integer.MAX_VALUE - 4]
甚至是这些最后声明的数组中的10个,几乎是不能声明的数组的10倍。
答案 1 :(得分:1)
您可以在下面的链接中找到有关阵列创建的文档
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.10
每个维表达式都经过一元数值提升。提升的类型必须为int,否则会发生编译时错误。
因此,在编译时和运行时,使用byte
,char
,int
和int
应该可以正常工作。
正如预期的那样,long
可以提升为Sub Macro1()
Dim i As Long
Range("B5:E5").Offset(i).Select
With ActiveSheet.Shapes.AddChart
With .Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=Range("Pivot!$A$3:$E$5").Offset(i)
.SeriesCollection(1).ApplyDataLabels
.SeriesCollection(2).ApplyDataLabels
.SeriesCollection(3).ApplyDataLabels
.ShowValueFieldButtons = False
.HasTitle = True
.ChartTitle.Text = "Consolidated"
End With
.Name = "chart" & Format(i + 1, "000")
.Width = 288
.LockAspectRatio = msoTrue
End With
End Sub
,而不是相反,您的代码会出现编译时错误