Java 为什么我必须在Split方法中使用Array.toString?

Java 为什么我必须在Split方法中使用Array.toString?,java,arrays,tostring,Java,Arrays,Tostring,我不知道为什么我必须在split(String reges)方法中使用Array.toString。我已经尝试过,如果我离开Array.toString()方法,但是在那之后,该方法只写出内存地址 这是原始代码: public static String knights= "Then, when you have found the shrubbery, you must " + "cut down the mightiest tree in the forest

我不知道为什么我必须在split(String reges)方法中使用Array.toString。我已经尝试过,如果我离开Array.toString()方法,但是在那之后,该方法只写出内存地址

这是原始代码:

public static String knights=
        "Then, when you have found the shrubbery, you must " +
        "cut down the mightiest tree in the forest... " +
        "with... a herring!";

public static void split(String regex){
    System.out.println(Arrays.toString(knights.split(regex)));
}
我试过这样做:

public static void split(String regex){
    System.out.println(knights.split(regex).toString());
}
但是它只写了地址,没有写骑士的名字


或者我如何在不使用array.toString()方法的情况下重写split方法?

由于
String#split
返回字符串数组,因此必须调用
array.toString
。或者,您可以按如下方式迭代结果:

String[] results = knights.split(regex);
for (String result : results) {
    System.out.println(result);
}

输出的格式可能略有不同,但实现了相同的想法。但是正如您所看到的,
Arrays.toString
更加简洁,并且您所需的工作量更少。但是,迭代方法(如上)使您能够更好地控制输出的格式。

数组。toString调用是必需的,因为
String#split
返回一个字符串数组。或者,您可以按如下方式迭代结果:

String[] results = knights.split(regex);
for (String result : results) {
    System.out.println(result);
}
输出的格式可能略有不同,但实现了相同的想法。但是正如您所看到的,
Arrays.toString
更加简洁,并且您所需的工作量更少。但是,迭代方法(如上)使您能够更好地控制输出的格式。

当您使用String.split()方法时,它会返回一个字符串数组,这些字符串最初是根据正则表达式分隔的

Array类重写了toString()方法,因此当您在System.out语句中使用它时,您可以看到所有标记。

当您使用String.split()方法时,它返回一个字符串数组,该数组最初是根据正则表达式分隔的


Array类已覆盖toString()方法,因此当您在System.out语句中使用它时,您可以看到所有标记。

数组是Java中的一种特殊类型的对象,编译器必须对其进行不同的处理(例如索引)。它使用
Object
的默认
toString()
方法,该方法只打印地址。数组(
String[]
此处)不是
Arrays
的实例,它只是一个处理数组的助手类。

数组是Java中一种特殊类型的对象,编译器必须以不同的方式处理它(例如索引)。它使用
Object
的默认
toString()
方法,该方法只打印地址。数组(
String[]
此处)不是
Arrays
的实例,它只是一个用于处理数组的助手类。

请尝试

public static void split(String regex){
    String[] strArr = knights.split(regex); // Split the knights string using the specified delimiter
    // Cycle through the array
    for (String a : strArr) {
        System.out.print(a + " ");
    }
    System.out.println();
}
纯数组不像Java中的其他对象那样有一个好的
toString
方法(这解释了为什么您得到的是地址而不是元素列表)。因此,要打印出数组的内容,您几乎总是需要使用
for
循环对其进行迭代,或者像在第一个代码片段中那样使用数组类的静态toString方法,这对您来说几乎是一样的

总而言之,隐式的toString,例如
System.out.println(someArray)
,与
Array.toString(someArray)
不同

public static void split(String regex){
    String[] strArr = knights.split(regex); // Split the knights string using the specified delimiter
    // Cycle through the array
    for (String a : strArr) {
        System.out.print(a + " ");
    }
    System.out.println();
}
纯数组不像Java中的其他对象那样有一个好的
toString
方法(这解释了为什么您得到的是地址而不是元素列表)。因此,要打印出数组的内容,您几乎总是需要使用
for
循环对其进行迭代,或者像在第一个代码片段中那样使用数组类的静态toString方法,这对您来说几乎是一样的

总而言之,隐式的toString,例如
System.out.println(someArray)
,与
Array.toString(someArray)
不同。toString(someArray)

请参见
数组中的实用方法
toString
,您需要了解它在传递数组时的作用。这就是“原始代码”中使用的方法

但是在您的代码中,您正在调用一个不同的
toString
方法。

请参见
Arrays
中的实用程序方法
toString
,您需要了解它在传递数组时的作用。这就是“原始代码”中使用的方法


但是在您的代码中,您正在调用一个不同的
toString
方法。

早在Java 1.0时代,数组上的.toString()方法是默认实现,因此

knights.split(regex).toString()
会打印出来吗

[java.lang.String@01234abcdef]
或者别的什么(我记不起确切的格式)。最终决定应该有一种很好的方法来打印数组,但是现在改变数组的行为已经太晚了

因此,java.util.array上的静态帮助器方法之一是新的.toString(array)方法,这就是为什么不能只在数组上调用.toString()


正如其他人所指出的,如果您真的想避免使用array.toString(),那么可以使用循环。但是库函数是可以使用的。

早在Java 1.0时代,数组上的.toString()方法是默认实现,所以

knights.split(regex).toString()
会打印出来吗

[java.lang.String@01234abcdef]
或者别的什么(我记不起确切的格式)。最终决定应该有一种很好的方法来打印数组,但是现在改变数组的行为已经太晚了

因此,java.util.array上的静态帮助器方法之一是新的.toString(array)方法,这就是为什么不能只在数组上调用.toString()


正如其他人所指出的,如果您真的想避免使用array.toString(),那么可以使用循环。但是库函数是可以使用的。

程序打印内存地址的原因是因为数组的toString()方法的行为(String.split()返回字符串数组)。