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

相关文章

来自专栏PHP技术

php面试题及答案

答案:Safe_mode是php的安全模式。开启之后,主要会对系统操作、文件、权限设置等方法产生 影响,主要用来应对webshell。以下是受到影响的一些函数:

793
来自专栏大内老A

.NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源

物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON、XML和INI,对应的配置源类型分别是JsonConfiguratio...

3606
来自专栏前端架构与工程

【译】《Understanding ECMAScript6》- 第八章-Module

目录 模块是什么 使用基础 接口标识符重命名 缺省接口 Re-exporting 非绑定import 总结 JavaScript令人困惑并且易引发错误的特性之一...

1896
来自专栏蓝天

Google的dense_hash注意点

使用Google的dense_hash_map,在插入数据之前,需要先调用set_empty_key()设置一个空Key,Key的值可以为任意符合类型的。但请...

381
来自专栏WebApiClient

WebApiClient的接口输入验证

随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍WebApiClient的接口参数输...

22215
来自专栏Python中文社区

一种Python全局配置规范以及其修改

專 欄 ❈丁果,Python中文社区作者。对django、pyqt、opencv、tornado感兴趣。 GitHub:https://github.com/...

2129
来自专栏阮一峰的网络日志

强类型 JavaScript 的解决方案

JavaScript 是一种弱类型(或称动态类型)语言,即变量的类型是不确定的。 x = 5; // 5 x = x + 'A'; // '5A' 上面代码中,...

3285
来自专栏大内老A

ASP.NET Core的配置(3): 将配置绑定为对象[上篇]

出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的...

1836
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版7.6节 Map coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

162
来自专栏Golang语言社区

厚土Go学习笔记 | 03. 数学运算的随机数

总是要有使用随机数的情况。这就需要使用math包。 package main import( "fmt" "math/rand" ) fun...

2776

扫描关注云+社区