javaSystem.out.println()输出byte[]、char[]异常的问题详析

前言

今天 突然有人问我他写的byte[]和char[],在用System.out.println()输出的时候所得的值有问题?

细思恐惧啊 我之前怎么没发现。。。。。。。。。。。。。。。。

废话不多说 代码如下

/**
 * @Author:
 * @Date: 2019/1/9/00099:23
 * @Version 1.0
 */
public class arrayTest {
 public static void main(String[] args) {
  //创建一个byte数组
  byte[] b = {'a'};
  //创建一个char数组
  char[] c = {'a'};
  //用System.out.println输出byte数组
  System.out.println(b);//控制台输出 [B@7adf9f5f
  //用System.out.println输出char数组
  System.out.println(c);//控制台输出 a
 }
}

由代码可以看出,使用System.out.println()byte数组和输出char数组所产生的不同,

输出byte数组 输出的是内存地址

输出char数组 输出的是数组的元素

原因是什么嘞·············????接着往下看。

查资料发现,System.out.println()是printStream类的成员方法,此方法只提供了以下几种数据类型的输出重载函数:

--------------------------------------------------------------------------------------------------------------------

println()        void  没有返回值  通过写入分隔符字符串来终止当前行

println(boolean x)    void  没有返回值  打印一个布尔值,然后终止该行

println(char x)      void  没有返回值  打印一个字符,然后终止该行

println(char[] x)     void  没有返回值  打印一个字符数组,然后终止该行

println(double x)     void  没有返回值  打印双精度浮点数,然后终止该行

println(float x)      void  没有返回值  打印单精度浮点数,然后终止该行

println(int x)       void  没有返回值  打印一个整数,然后终止该行

println(long x)      void  没有返回值  打印long整数,然后终止该行

println(Object x)     void  没有返回值  打印一个对象,然后终止该行

println(String x)     void  没有返回值  打印一个字符串,然后终止该行

-----------------------------------------------------------------------------------------------------------------------

由以上可以看出 我们在输出boolean、char、char[]、double、float、int、long、String 类型的数据,

会输出相应的值,对于Object的输出,System.out.println()会先调用其toString方法,然后会将该对象的toString方法的返回值输出,

由于System.out.println()没有对int[]、String[]、byte[]、Object[]、输出函数重载,所有在使用该方法输出这些数据类型时,该方法会将其中的参数

做数组首元素来对待,也就是说System.out.println(b);等价于System.out.println(b[0]);然后调用首元素的toString方法,并将其输出。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • javaSystem.out.println()输出byte[]、char[]异常的问题详析

    前言 今天 突然有人问我他写的byte[]和char[],在用System.out.println()输出的时候所得的值有问题? 细思恐惧啊 我之前怎么没发现................ 废话不多说 代码如下 /** * @Author: * @Date: 2019/1/9/00099:23 * @Version 1.0 */ public class arrayTest { public static void main(String[] args) { //创建一个byte数组 byte

  • Spring Boot详细打印启动时异常堆栈信息详析

    前言 SpringBoot在项目启动时如果遇到异常并不能友好的打印出具体的堆栈错误信息,我们只能查看到简单的错误消息,以致于并不能及时解决发生的问题,针对这个问题SpringBoot提供了故障分析仪的概念(failure-analyzer),内部根据不同类型的异常提供了一些实现,我们如果想自定义该怎么去做? FailureAnalyzer SpringBoot提供了启动异常分析接口FailureAnalyzer,该接口位于org.springframework.boot.diagnosticsp

  • Python 输出详细的异常信息(traceback)方式

    问题描述 为了程序的正常运行,进行异常处理是有必要的,甚至于有时候,我们会主动的抛出异常,然后让程序进行异常捕获,再进行进一步的处理.但是,在开发的程序相对较大的过程中,我们不能一昧的进行try....except.而是要弄清楚到底抛出的是什么异常,同时,对于某些未知的异常,我们应该清楚的定位到到底是哪一行程序抛出的异常,针对这种情况,traceback库能极大的帮助我们. 解决方法 代码只需一行,即 print(traceback.format_exc()) 即可,这样即可打印详细的信息,这个

  • java 异常的实例详解

    java 异常的实例详解 1.异常的定义:程序在运行时出现不正常情况. 异常的划分: Error:严重的问题,对于error一般不编写针对性的代码对其进行处理. Exception:非严重的问题,对于exception可以使用针对性的处理方式进行处理. 2.异常的处理:(固定格式) try {需要被检测的代码:} catch(异常类 变量) {处理异常的代码(处理方式):}//这里应当是要有针对性的处理方式 finally {一定会执行的语句:}//通常是关闭资源的代码,因为资源必须得到释放 对

  • java异常处理throws完成异常抛出详解

    已检查异常抛出 对于已检查异常(checked exceptions),编译器强制要求捕获并处理可能发生的异常,不处理就不能通过编译.但调用的方法没有能力处理这种异常,对于这种情况,可以在方法声明处使用throws子句来声明抛出异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理.如:在service层读取文件,如果文件不存在,则需要将文件不存在的这条信息反馈给用户.要求在service层将此异常向上抛,用户层调用services层获取此条信息,反馈给用户.示例代码如下: 创建类Re

  • Android jni调试打印char阵列的实例详解

    Android jni调试打印char阵列的实例详解 前言: 在android开发中,用jni有时候需要打印某一个字符串的二进制格式输出,比较友好的输出格式是一个四列,八列,十六列的矩阵格式.类似在错误删除野指针时出现如下错误: pid: 2721, tid: 3005, name: pool-5-thread-5 >>> onxmaps.hunt <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr dea

  • java异常继承何类,运行时异常与一般异常的区别(详解)

    一.基本概念 Throwable是所有异常的根,java.lang.Throwable Error是错误,java.lang.Error Exception是异常,java.lang.Exception Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类. Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题.大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java

  • 详解Java中NullPointerException异常的原因详解以及解决方法

    NullPointerException是当您尝试使用指向内存中空位置的引用(null)时发生的异常,就好像它引用了一个对象一样. 当我们声明引用变量(即对象)时,实际上是在创建指向对象的指针.考虑以下代码,您可以在其中声明基本类型的整型变量x: int x; x = 10; 在此示例中,变量x是一个整型变量,Java将为您初始化为0.当您在第二行中将其分配给10时,值10将被写入x指向的内存中. 但是,当您尝试声明引用类型时会发生不同的事情.请使用以下代码: Integer num; num

  • python中异常的传播详解

    目录 1.异常的传播 2.如何处理异常 1.异常的传播 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播.如果函数中没有对异常进行处理,则异常会继续向函数调用者传播.如果函数调用者处理了异常,则不再传播,如果还没有处理,则继续向他的调用者传播,直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息到控制台.所以异常的传播我们也称之为抛出异常. 异常传播示例如下: def fn1(): print('Hello fn') print(10/0) def

  • Java ConcurrentModificationException异常解决案例详解

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常.下面我们就来讨论以下这个异常出现的原因以及解决办法. 以下是本文目录大纲: 一.ConcurrentModificationException异常出现的原因 二.在单线程环境下的解决办法 三.在多线程环境下的解决方法 一.C

随机推荐