• 使用System.out.print/prilntln() 输出时存在的问题


      刚学习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             1
    45             h
    46             hello world !
    47             [I@54477b4e
    48             1234
    49             Student@20f0691c
    50             [LStudent;@784be29
    51             [Ljava.lang.String;@1be0799a
    52             
    53     Question : 
    54     
    55     we will get different value by using method--'System.out.println/print' 
    56     
    57     to output some variables with different type
    58     
    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<Integer> intList = new ArrayList<Integer>();
    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方法。

  • 相关阅读:
    密码-散乱的密文
    设置nginx服务器
    Postman设置authorization
    mongodb 学习笔记 1
    一道面试题,观察者模式
    laravel-admin form组件
    laravel-admin 管理平台获取当前登陆用户信息
    Laravel-admin安装富文本编辑器 WangEditor 上传图片到服务器,而不是按BASE64保存
    Laravel报错Whoops, looks like something went wrong 解决办法
    菜鸟用composer 安装项目依赖 vendor:当拿到一个Laravel项目时怎么配置本地环境
  • 原文地址:https://www.cnblogs.com/caiyao/p/3664438.html
Copyright © 2020-2023  润新知