A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© igi9009 中级黑马   /  2014-4-23 18:27  /  1365 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        public static void main(String[] args)
        {
                int[] arr = {1,2,3};
                char[] ch = {'a','b','c'};
               
                System.out.println(arr);//打印的是数组在内存中的地址
                System.out.println(ch);//打印的是abc
        }
}

想问下为什么 int型的数组打印的事地址,而字符数组就可以直接打印。。 我记得毕老师好像说过,但我忘了。
还有都有什么类型可以直接打印。。

5 个回复

倒序浏览
本帖最后由 今生无憾 于 2014-4-23 18:44 编辑

println函数的内部机制,重载了九次,包括基本数据类型,和Stirng类型一共九个。其中就包括 char数组,但是没有int数组,只有int类型的 ,'所以打印是hashcode,;

  简单说就是,println方法有专门对char数组作为字符串处理输出的.
回复 使用道具 举报
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = {1,2,3};
  6.                 char[] ch = {'a','b','c'};
  7.                
  8.                 System.out.println(arr);//没有提供int数组的println直接打印方法,采用默认打印地址值
  9.                 System.out.println(ch);//java在print和println专门提供了打印字符数组的方法,就是print(char[]a),相当于强制转换打印方式
  10. //具体可查看java API文件java-lang包中的PrintStream类关于print和println的描述
  11. }
复制代码

回复 使用道具 举报
查找了一下API,我发现System.out.println()是有System.out.println(char[])这样一个专门用于打印char[]数组的重载的。

System类

[size=-1]java.lang
类 System
java.lang.Object  [img][/img]java.lang.System
public final class Systemextends ObjectSystem 类包含一些有用的类字段和方法。它不能被实例化。
在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

在这里有out

outpublic static final PrintStream out“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。 对于简单独立的 Java 应用程序,编写一行输出数据的典型方式是:
     System.out.println(data)
请参阅 PrintStream 类中的 println 方法。

另请参见:PrintStream.println(), PrintStream.println(boolean), PrintStream.println(char), PrintStream.println(char[]), PrintStream.println(double), PrintStream.println(float), PrintStream.println(int), PrintStream.println(long), PrintStream.println(java.lang.Object), PrintStream.println(java.lang.String)
println 方法:
[size=-1] void
println(boolean x)
          打印 boolean 值,然后终止行。
[size=-1] void
println(char x)
          打印字符,然后终止该行。
[size=-1] void
println(char[] x)
          打印字符数组,然后终止该行。(找到了char数组的打印方法)
[size=-1] void
println(double x)
          打印 double,然后终止该行。
[size=-1] void
println(float x)
          打印 float,然后终止该行。
[size=-1] void
println(int x)
          打印整数,然后终止该行。
[size=-1] void
println(long x)
          打印 long,然后终止该行。
[size=-1] void
println(Object x)
          打印 Object,然后终止该行。
[size=-1] void
println(String x)
          打印 String,然后终止该行。
printlnpublic void println(char[] x)打印字符数组,然后终止该行。此方法的行为就像先调用 print(char[]) 然后调用 println() 一样。
参数:x - 要打印的字符数组。printpublic void print(char[] s)打印字符数组。按照平台的默认字符编码将字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。 参数:s - 要打印的字符数组 抛出: NullPointerException - 如果 s 为 null

这些方法决定了如果你进行System.out.println(char[])操作,会直接把char[]中的元素打印出来。


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为在这个打印流中有print()打印方法,char类型的数据此方法支持打印出数组的,而整型则不能打印数组。
如图,jdk帮助文档:

无标题.png (55.04 KB, 下载次数: 25)

无标题.png
回复 使用道具 举报
size=-1] void
println(boolean x)
          打印 boolean 值,然后终止行。
[size=-1] void
println(char x)
          打印字符,然后终止该行。
[size=-1] void
println(char[] x)
          打印字符数组,然后终止该行。(找到了char数组的打印方法)
[size=-1] void
println(double x)
          打印 double,然后终止该行。
[size=-1] void
println(float x)
          打印 float,然后终止该行。
[size=-1] void
println(int x)
          打印整数,然后终止该行。
[size=-1] void
println(long x)
          打印 long,然后终止该行。
[size=-1] void
println(Object x)
          打印 Object,然后终止该行。
[size=-1] void
println(String x)
          打印 String,然后终止该行。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马