【答疑解惑】Java中System.out.print函数

语音版:

在Java中经常会用到System.out.print函数,大家经常用它来打印日志,是最基本的调试程序方法。前几天遇到群里有一小伙伴问为什么我打印一个char数组是直接输出的一个字符串,可是打印其他的数组输出的结果是一个对象,关于这个问题我给大家讲一下。

首先对于这种不明白Java API方法的问题我的建议是直接查看Java源码,给大家推荐一个查看源码特别方便的工具-Source Insight,网上有破解版大家可以自行搜索下载,然后新建工程导入Java源码,Java源码在jdk安装目录,例如我的是:C:\Program Files\Java\jdk1.7.0_65\src.zip,是一个压缩包,解压缩就行了。

然后搜索System.java源码了,找到out对象,源码如下:

/**
* Default output stream.
*/
public static final PrintStream out;

out对象其实是一个PrintStream的实例,然后就查看PrintStream.java源码,找到print函数,大家看源码就会发现在PrintStream类中print函数有好几个,都是print的重载函数,重载在上一周的答疑解惑讲的很明白,就是函数的参数列表不同。大致看了一下print的重载函数,参数基本上分为三类:基本数据类型、char数组和Object。

找到打印char数组的那个重载方法看一下,代码如下:

/**
* Prints the string representation of the character array {@code chars}.
*/
public void print(char[] chars) {
    print(new String(chars, 0, chars.length));
}

看完源码大家应该明白了,打印char数组的时候实际上是用char数组新建了一个String对象,然后把String对象输出,所以打印char数组看到的是一个char数组元素构成的字符串。

今天的答疑解惑主要给大家说的是两件事:

  • System.out.print函数输出char数组为什么是字符串;
  • 遇到类似Java API方法不明白的问题怎么查看Java源码;

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

一个Java对象到底占用多大内存

大家可以用这个代码边看边验证,注意的是,运行这个程序需要通过javaagent注入Instrumentation,具体可以看原博客。我今天主要是总结下手动计算J...

571
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试八(16道)

【选择题】Java基础测试八(16道) 101.下面哪个流类属于面向字符的输入流( D ) A)BufferedWriter ...

4716
来自专栏微信公众号:Java团长

Java堆和栈的区别

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作...

1523
来自专栏Java爬坑系列

你不可不知的Java引用类型之——Reference源码解析

reference指代引用对象本身,referent指代reference引用的对象,下文介绍会以reference,referent形式出现。

731
来自专栏流柯技术学院

Jmeter函数组件开发

在eclipse新建项目,导入jmeter目录下\lib\ext目录中的的ApacheJMeter_core.jar,继承AbstractFunction类。

731
来自专栏coolblog.xyz技术专栏

Dubbo 源码分析 - 自适应拓展原理

我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心。Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,...

872
来自专栏积累沉淀

JDK动态代理的底层实现原理

JDK动态代理的底层实现原理      动态代理是许多框架底层实现的基础,比如Spirng的AOP等,其实弄清楚了动态代理的实现原理,它就没那么神奇了,下面就来...

4857
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试九(16道)

【选择题】Java基础测试九(16道) 117.下列说法正确的有() A. class中的constructor不可省略 B. constructo...

3607
来自专栏Java学习网

java原理之Java 解析 Class 文件过程学习

java之所以能够实现跨平台,便在于其编译阶段不是将代码直接编译为平台相关的机器语言,而是先编译成二进制形式的java字节码,放在Class文件之中,虚拟机再加...

852
来自专栏转载gongluck的CSDN博客

c++ 中__declspec 的用法

c++ 中__declspec 的用法 语法说明: __declspec ( extended-decl-modifier-seq ) 扩展修饰符: ...

6187

扫码关注云+社区