刚学习Java时第一个接触的method就是System.out.println() 方法。但是最近在使用它输出一些变量时出现了我不理解的现象,首先上代码:

  

 /*
*
* using method System.out.println/print
*
*
*/
class Student{ String name ;
Student(String name){
this.name = name ;
}
void show (){
System.out.println("name is :" + name );
} }
public class TestOutString { public static void main(String[] args){
int varInt = 1 ;
char varChar = 'h';
String varString = "hello world !";
int[] intArray = {1,2,3};
char[] charArray = {'1','2','3','4'};
Student studentObject = new Student("first");
Student[] studentArray = {new Student("1"),new Student("2"),new Student("3")};
String[] stringArray = {"1","2","3","4"};
boolean[] booleanArray = {true , false , true , false}; System.out.println(varInt);
System.out.println(varChar);
System.out.println(varString);
System.out.println(intArray);
System.out.println(charArray);
System.out.println(studentObject);
System.out.println(studentArray);
System.out.println(stringArray); /*
Result : 1
h
hello world !
[I@54477b4e
1234
Student@20f0691c
[LStudent;@784be29
[Ljava.lang.String;@1be0799a Question : we will get different value by using method--'System.out.println/print' to output some variables with different type */

由上程序可以看出:

  使用System.out.println()输出基本数据类型和char数组时正常,但是在输出int、string、object、object数组、Boolean数组时出现只输出类似   '类名 @ 一串十六进制的数'  的字符串。发现原因有以下几点:

  1. System.out.println()(是PrintStream类的成员方法)方法只提供了以下几种数据类型输出的重载函数:

  

  所以我们在输出  boolean 、 char 、char【】 、 double 、float 、int 、 long 数据时会输出其对应的值。对于object的输出System.out.println方法会首先调用其     toString方法,然后将该对象的toString方法的返回值输出。关于toString方法的具体输出会在下面说明。

2. 由于System.out.println没有对int[] 、String[] 、 object[] 数组输出的重载函数,所以在使用该方法输出这些数据类型时,该方法会将其中的参数作数组首元素来对待。也就  是说,System.out.println(intArray) 等价于   System.out.println(intArray[0])。然后调用数组首元素的toString方法,并将其输出。

  toString()方法:

    是所有对象的超类,它的功能是返回一个字符串,这个字符串由  调用它的类的类名 + @ + 调用它的类的哈希值十六进制表示形式  组成。

    即 :getClass().getName() + '@' + Integer.toHexString(hashCode())

  由以上两个原因应该可以得到上面输出结果是由什么导致的了。

那么如何让我定义的数据直接通过System.out.println输出其值呢 ?

我认为:

对于System.out.println()支持的数据类型例如: int 、 double、char【】 等可以直接输出其值。

对于Object类型的数据,可以重写它的toString() 方法,按照自己的想法输出。因为System.out.println输出object类型值时就是调用其toString方法。

对于System.out.println不支持的数据类型例如 : int[] / double[] / String[] /boolean 等,可以使用类集,例如 ArrayList等,

 ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
System.out.println(intList);

这样就可以输出其值

当然如果你对这样的输出不够满意,也同样可以重写ArrayLIst等类集框架的toString方法,因为System.out.println方法在输出ArrayList等类集变量时就是调用其toString方法。

使用System.out.print/prilntln() 输出时存在的问题的更多相关文章

  1. 电信SDK Pay函数里面System.out.print 无输出消息

    private void Pay(HashMap<String, String> payParams){ System.out.print("----------Pay Dian ...

  2. Python中print函数输出时的左右对齐问题

    为了将print函数输出的内容对齐,笔者在http://www.jb51.net/article/55768.htm中找到了左右对齐的方法.整理如下: 一.数值类型(int.float) #  %d. ...

  3. 关于System.out.println()与System.out.print("\n")的区别

    这是在写junit测试的时候发现的. import java.io.ByteArrayOutputStream; import java.io.PrintStream; public class Te ...

  4. Hadoop2.9下运行JAR包时System.out.println的输出日志

    根据博文——Hadoop日志存放路径详解中所述,Container日志包含ApplicationMaster日志和普通Task日志(关于其他类型的日志的详细说明请参考该博文,本文不再赘述) 所以可知, ...

  5. TDD之断言验证System.out.print输出

    业务类: public class OutDemo { public void print(String content) { System.out.print(content); } } 测试类: ...

  6. Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log

    日常啰嗦 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外,这段时间也在学习docker的相关知识,所以博客就没有继续写了,推荐一本书<Docker技术入门与实战>(第二版) ...

  7. Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)Java语言中System.out.print与Log的比较

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 前言 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外 ...

  8. File类--System.out.print(Object obj)的理解

    一.File 类(java.io) 概述:Java中使用File类来表示文件或者文件夹对象!     抽象路径名:描述文件或文件夹时,使用的路径符号,就是一个对象的字符串表示形式,如"c:\ ...

  9. ArrayList集合--关于System.out.print(Object obj);的理解

    1.ArrayList集合中常用的方法 ArrayList<Student> stuArrayList = new ArrayList<>(); //定义一个集合对象 stuA ...

随机推荐

  1. XP下使用IIS访问asp出现无权查看网页问题的解决办法

    这是用户权限问题,因为你用的磁盘是NTFS格式. 解决方法: 一.添加用户(“Everyone”或者“IUSR_你的机器名”,如IUSR_HONG,即“Internet 来宾用户”) 二.修改用户权限 ...

  2. javascript 中string 型数据转换成int类型

    var str1 = "1234";var str2 = "1234";number = parseInt(str1); number就是int型 str1+s ...

  3. Intellj IDEA快捷键

    Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码 ...

  4. ubuntu修改文件访问权限

    遇到“bash .....权限不够”的问题时, 从控制台进入到那个文件夹 chmod 777 * -R 全部子目录及文件权限改为 777

  5. .net学习笔记----Asp.net的生命周期之一应用程序生命周期

    Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...

  6. Redis笔记(二)Redis的部署和启动

    Linux下Redis的部署和启动 下载安装介质 Redis官网地址:http://www.redis.io/目前最新版本是redis-3.0.3. 可以访问 http://download.redi ...

  7. 在getView方法产生给用户item的视图以及数据

    在getView方法产生给用户item的视图以及数据

  8. NHibernate初探(1)

    1 NHibernate是ORM的一种. 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.本质上 ...

  9. matlab练习程序(多边形顶点凹凸性)

    生成简单多边形后,有时还需要对多边形各顶点的凹凸性做判断. 先计算待处理点与相邻点的两个向量,再计算两向量的叉乘,根据求得结果的正负可以判断凹凸性. 结果为负则为凹顶点,为正则为凸顶点. 凹顶点用o表 ...

  10. loj 1026( tarjan + 输出割边 )

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1026 思路:Tarjan 算法简单应用.割边的特点:low[v]>dfn[u]( ...