toString()方法简单分析
问题描述
今天在使用spotbugs代码走查时发现这样一个问题,如下,
String[] myArray=new String[] {"1","2","3"};
System.out.println(myArray.toString());
一看看上去这个代码没什么问题,打印了数组的值,关键是打印出的结果是什么?结果如下
[Ljava.lang.String;@7852e922
那么问题来了,打印出上面一行东西,这是什么,初衷是要打印数组中的值,起码也是能看懂的呀
暴露的问题
上面的代码,暴露了下面的问题,
1、对toString()方法的不了解;
2、如何打印出能识别的结果;
问题剖析
首先,看下toString()方法,此方法为Object类中定义的方法,一切继承Object类的方法都可以重写toString()方法,下面是Object类中toString()方法的定义,
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
此方法返回值是类的权限类名+@+hashcode码,参照上面的打印的结果,我们可以知道数组类没有重写toString()方法,那么要怎么优雅打印数组中的信息那?
通过查看Arrays类,我们发现Arrays类中虽然没有重新toString()类,但有几个重载的toString方法,例如,toString(boolean[] a)、toString(long[] a)、toString(Object[] a),下面是其中一个方法的源码,
public static String toString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i]));
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
通过分析,源码可以看出是以[]括起来,然后依次打印数组中的元素,那么在打印数组中元素的时候就可以使用Arrays.toString(Object[] a)方法,打印结果如下,
[1, 2, 3]
上面的结果是我们希望见到的,也是我们能理解的,只有这样的才是有意义的。
最后,所有的类均继承自Object类,如果不重新toString方法,打印的结果就是类的全限类名+@+hashcode,如果想要打印想要的信息,请务必重新toString方法。
谢谢,欢迎指正!
toString()方法简单分析的更多相关文章
- java.util.ComparableTimSort中的sort()方法简单分析
TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. T ...
- C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法
对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...
- 由Java中toString()方法引发的无意识的递归想到的
先看一段很简单的java代码: toString()/** * @author jeffwong */ public class InfiniteRecursion { public String t ...
- JavaScript加密解密7种方法总结分析
原文地址:http://wenku.baidu.com/view/9048edee9e31433239689357.html 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木 ...
- java 中 “文件” 和 “流” 的简单分析
java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 / ...
- Okhttp对http2的支持简单分析
在< Okhttp之RealConnection建立链接简单分析>一文中简单的分析了RealConnection的connect方法的作用:打开一个TCP链接或者打开一个隧道链接,在打开t ...
- Android实现录屏直播(一)ScreenRecorder的简单分析
http://blog.csdn.net/zxccxzzxz/article/details/54150396 Android实现录屏直播(一)ScreenRecorder的简单分析 Android实 ...
- OkHttp之BridgeInterceptor简单分析
在< Okhttp源码简单解析(一) >这篇博客简单分析了Okhttp请求的执行流程,通过该篇博客我们知道OkHttp的核心网络请求中内置"拦截器"发挥了重大作用:本篇 ...
- lombok的介绍、使用、简单分析和插件
学习下Lombok. 关于POJO Java面向对象编程中的特性中有封闭性和安全性.封闭性即对类中的域变量进行封闭操作,即用private来修饰他们.如此一来,其他类就不能对该变量访问了.这样,我们就 ...
随机推荐
- 【bbs】login.php
require的路径 整体结构的复用 渐变效果的加入 按钮:实现背景透明,文字不透明:在background-color中使用rgba,标准浏览器中,背景透明,文字不透明background-colo ...
- 【webpack】config/index.js
// see http://vuejs-templates.github.io/webpack for documentation. var path = require('path') module ...
- 《metasploit渗透测试魔鬼训练营》学习笔记第四章—web应用渗透
继续来学习metasploit...记好笔记是很重要的,下面开始正文: 二.WEB应用渗透技术 1.WEB应用渗透基础知识 先介绍WEB应用攻击的主要类型(大致介绍,具体请自行查 ...
- Ext之grid內編輯
Ext.grid.Panel xtype:gridpanel,grid 如果要完成在grid中編輯的功能.首先要填加 selType: 'cellmodel', plugins: [ ...
- 3.2 Spark内置RPC框架
实现的HttpFileServer,但在Spark 2.0.0版本中它也被废弃了,现在使用的是基于Spark内置RPC框架的NettyStreamManager.节点间的Shuffle过程和Block ...
- Spring @Value 默认值
@Value(value = "${etl.maxthreadcount:3}") private long MaxThreadCount;
- PAT——1021. 个位数统计
给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字 ...
- 精读 SBAR SDN flow-Based monitoring and Application Recognition
目录 架构 测量模块 分类模块 具体实现 实验:最后接入巴塞罗那的校园网流量测试: SBAR: SDN flow-Based monitoring and Application Recognitio ...
- Maven创建Web项目、、、整合SSM框架
自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...
- svn 提交报错post-commit hook failed (exit code 23) with output
svn 提交文件,hook同步更新报权限错误 排查后可能原因是被同步的服务器 selinux 已开启. 查看状态命令:/usr/sbin/sestatus -v #如果SELinux status参 ...