ACM-JAVA中char类型的输入和char数组的输出问题

本文最后更新于:December 8, 2021 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

1.输入

1.1 单个字符

1
2
3
4
5
6
7
8
//示例1
Scanner Scin = new Scanner(System.in);
char ch = Scin.next().charAt(0); //qwer
System.out.println(ch); //q

//示例2
char ch = Scin.next().charAt(3); //qwerasdf
System.out.println(ch); //r

1.2 字符数组

1
2
3
4
char[] ch = new char[50];
String s = Scin.next(); //qwer
ch = s.toCharArray();
System.out.println(ch); //qwer

2.输出

就记录一下坑吧。

先看代码:

1
2
3
4
5
6
char[] ch = new char[50];
String s = Scin.next(); //qwerasdf
ch = s.toCharArray();
System.out.println("s = :" + s); //s = :qwerasdf
System.out.println("ch = :" + ch); //ch = :[C@2b193f2d
System.out.println(ch); //qwerasdf

解释

可以看见,最后两行输出同一个数组,但输出却不一样。这是因为调用的输出方法不一样。

  • System.out.println(“ch = :” + ch); 的源码:
1
2
3
4
5
6
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
  • System.out.println(ch); 的源码:
1
2
3
4
5
6
public void println(char x[]) {
synchronized (this) {
print(x);
newLine();
}
}

可以看见,两次调用的方法是不一样的。这是println方法的重载问题导致的。第一次调用的方法的参数是String类型,第二次调用的方法的参数是char[]数组类型的。这是因为第一次中的 “ch = :” 把数组转换成了字符串String类型了。


本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/3318299030.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!