为了账号安全,请及时绑定邮箱和手机立即绑定

为什么此输出由以下代码生成,为什么不生成错误/异常?

为什么此输出由以下代码生成,为什么不生成错误/异常?

RISEBY 2022-07-20 15:51:17
class VarAgs{    // variable length parameters    static void vaTest(String ... str){        System.out.println(str.length + " contains : ");        for(String s:str){              System.out.print(s+" ");        }        System.out.println();    }    public static void main(String[] args) {        String s1[] = {"hi","hello"};        vaTest(s1);        vaTest(s1 + " 1 ");    }}输出:2 contains : hi hello 1 contains : [Ljava.lang.String;@2a139a55 1 
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

当您将数组与字符串连接时

    vaTest(s1 + " 1 ");

然后对数组的引用转换为字符串

 [Ljava.lang.String;@2a139a55

所以方法 vaTest 将收到

[Ljava.lang.String;@2a139a55 1

作为一个大小为 1 的数组。


查看完整回答
反对 回复 2022-07-20
?
HUWWW

TA贡献1874条经验 获得超12个赞

它的工作原理如下:

  1. s1被隐式转换为 String( s1.toString()),这会导致[Ljava.lang.String;@2a139a55.

  2. 接下来,将字符串1添加到上述字符串中。这导致[Ljava.lang.String;@2a139a55 1

  3. 接下来,这个生成的字符串在 String[] 类型的单元素数组中传递给varargs()函数。


查看完整回答
反对 回复 2022-07-20
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

当您这样做时,由于字符串连接规则(“+”号)vaTest(s1 + " 1 ");,将使用 s1 的字符串表示。因此,您得到的不是格式化的数组: [Ljava.lang.String;@2a139a55

将其替换为vaTest(Arrays.toString(s1) + " 1 ");以获得预期的结果。


查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信