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

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 


RISEBY
浏览 107回答 3
3回答

扬帆大鱼

当您将数组与字符串连接时    vaTest(s1 + " 1 ");然后对数组的引用转换为字符串 [Ljava.lang.String;@2a139a55所以方法 vaTest 将收到[Ljava.lang.String;@2a139a55 1作为一个大小为 1 的数组。

HUWWW

它的工作原理如下:s1被隐式转换为 String( s1.toString()),这会导致[Ljava.lang.String;@2a139a55.接下来,将字符串1添加到上述字符串中。这导致[Ljava.lang.String;@2a139a55 1接下来,这个生成的字符串在 String[] 类型的单元素数组中传递给varargs()函数。

红糖糍粑

当您这样做时,由于字符串连接规则(“+”号)vaTest(s1 + " 1 ");,将使用 s1 的字符串表示。因此,您得到的不是格式化的数组: [Ljava.lang.String;@2a139a55将其替换为vaTest(Arrays.toString(s1) + " 1 ");以获得预期的结果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java