博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用System.out.print/prilntln() 输出时存在的问题
阅读量:5164 次
发布时间:2019-06-13

本文共 2996 字,大约阅读时间需要 9 分钟。

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

  

1 /* 2 * 3 * using method System.out.println/print 4 * 5 * 6 */ 7 class Student{ 8  9     String name ;10     Student(String name){11         this.name = name ;12     }13     void show (){14         System.out.println("name is :" + name );15     }16 17 }18 public class TestOutString {19 20 public static void main(String[] args){21     int varInt = 1 ;22     char varChar = 'h';23     String varString = "hello world !";24     int[] intArray = {1,2,3};25     char[] charArray = {'1','2','3','4'};26     Student studentObject = new Student("first");27     Student[] studentArray = {
new Student("1"),new Student("2"),new Student("3")};28 String[] stringArray = {"1","2","3","4"};29 boolean[] booleanArray = {
true , false , true , false};30 31 32 System.out.println(varInt);33 System.out.println(varChar);34 System.out.println(varString);35 System.out.println(intArray);36 System.out.println(charArray);37 System.out.println(studentObject);38 System.out.println(studentArray);39 System.out.println(stringArray);40 41 /*42 Result :43 44 145 h46 hello world !47 [I@54477b4e48 123449 Student@20f0691c50 [LStudent;@784be2951 [Ljava.lang.String;@1be0799a52 53 Question : 54 55 we will get different value by using method--'System.out.println/print' 56 57 to output some variables with different type58 59 */

由上程序可以看出:

  使用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等,

1 ArrayList
intList = new ArrayList
();2 intList.add(1);3 intList.add(2);4 intList.add(3);5 intList.add(4);6 System.out.println(intList);

这样就可以输出其值

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

 

转载于:https://www.cnblogs.com/caiyao/p/3664438.html

你可能感兴趣的文章
popular short sentences
查看>>
Python操作SQLite数据库的方法详解
查看>>
如何透彻的掌握一门机器学习算法
查看>>
用数据分析进行品类管理
查看>>
实验二:编写输出"Hello World!"
查看>>
菜单和工具条(二)
查看>>
hadoop17---RPC和Socket的区别
查看>>
poj 1466
查看>>
洛谷P1238 走迷宫题解
查看>>
js正则表达
查看>>
UNITY 多个子MESH与贴图的对应关系
查看>>
[BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】
查看>>
find命令
查看>>
Learning how to learn
查看>>
node.js模块本地代理模块(将自己本机/局域网)服务 代理到外网可以访问
查看>>
苹果内购买
查看>>
使用JMeter代理录制app测试脚本
查看>>
MVC 未启用角色管理功能
查看>>
Linq to Object实现分页获取数据
查看>>
mac常用系统命令
查看>>