java是args[0],args[1]变量吗?
我有这样的代码:
public class Hi
{
public static void main(String args[])
{
...
}
}
如果我输入下面的“java Hi String1 String2”,那么有多少个对象
正确答案是:
对象:3:“String1”对象,“String2”对象,args指定的数组点
变量:4:args,“String1”,“String2”,args的数组点
我的问题是:
如果我能将变量计数中的“String1”和“String2”视为args[0]和args[1]?(这意味着args[0]和args[1]是变量。)
如果代码是
int a[2]={0};
我知道有1个数组对象和2个变量(a,数组对象),但由于Java中的字符串是特殊的,我想知道我是否必须接受“String1”和“String2”,或者我可以接受args[0]和args[1]作为变量,如下所示
对象:3:“String1”对象,“String2”对象,args指定的数组点
变量:4:args,args[0],args[1],按args排列的数组点
# 1 楼答案
TL;DR简短回答:是的,
args[0]
和args[1]
是变量根据JLS4.12.3. Kinds of Variables,有8种变量。其中,您的代码使用了其中3个:
当你运行
java Hi String1 String2
时,你会得到:3个目标:
String[2]
(数组)"String1"
(字符串)"String2"
(字符串)4个变量1:
args
(方法参数)args.length
(实例变量)args[0]
(数组组件)args[1]
(数组组件)请注意,如果您创建了一个
String[2]
并且没有为数组组件赋值(即,将其null
),那么您只有一个对象,但仍然有4个变量1)不计算
String
对象内的私有字段(实例变量)int a[2]={0};
是无效代码,将无法编译使用初始值设定项时,不能指定数组大小,因为这在初始值设定项中是隐式的
此外,您应该始终将
[]
数组声明为类型的一部分,而不是名称的一部分。用名称指定[]
是从C语言继承下来的,非常不推荐正确的声明是:
也就是说:
1.目标:
int[1]
(数组)3个变量:
a
(局部变量,种类#8)a.length
(实例变量)a[0]
(数组组件)