【答疑解惑】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 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5476
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4025
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2782
来自专栏落花落雨不落叶

canvas画简单电路图

62111
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2546
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31810
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3869

扫码关注云+社区