在Java中从字符串中提取字符

Avi*_*vin 1 java string char

我是Java的编程和运行代码的初学者

 String demo = "This is first string";
 char ch[]= demo.toCharArray();
 System.out.println(ch);
Run Code Online (Sandbox Code Playgroud)

输出:

 This is first string
Run Code Online (Sandbox Code Playgroud)

而,

 System.out.println("result is "+ch);
Run Code Online (Sandbox Code Playgroud)

输出: - (显示与对象内存相关的哈希码)

 result is: someHashcode
Run Code Online (Sandbox Code Playgroud)

1)为什么我们两个都有不同的输出(上面提到的代码)?实际发生在这里的事情.

而另一方面

 int num[]={1,2,3,4};
 System.out.println(num);
Run Code Online (Sandbox Code Playgroud)

输出: -

 somehashcode
Run Code Online (Sandbox Code Playgroud)

2)这不像char数组一样工作(如上面提到的第一个代码)并将输出作为哈希码,为什么?

Boh*_*rdt 5

PrintStream有重载println的字符数组方法.将字符数组传递给它时,它会从中打印字符,就像它是一个字符串一样.

Hovewer当你传递其他类型的数组时,它将它视为对象 - 它的toString()表示被打印出来.

在这个例子中:

System.out.println("result is "+ch);
Run Code Online (Sandbox Code Playgroud)

您将数组附加到字符串文字,因此toString形式ch将附加到文字,这就是为什么您没有得到预期的结果.

  • 只是为了清楚.`out`是`PrintStream`类型的`System`类中的静态变量.因此它可以访问`println(String)`和`println(char [])`方法(以及许多其他方法).现在`PrintStream #print(char [])`方法将打印传递数组中的所有字符,但是如果``result is"+ ch`,这段代码将被转换为`String`,而不是`char []`因为当你使用`+`而一个操作数是String而另一个不是String时,compler将使用StringBuilder连接这些值,对于非String对象,它附加了`toString()`方法的结果(对于数组返回类型为@ hexhash) . (2认同)