【JAVA】java中char类型数组用数组名打印结果不是地址值而是数组内容

问题描述

  • 引用型变量存储的是对象实例的地址值,如果直接打印变量,输出的应该是地址值。
  • 数值型数组如int型数组:初始化后直接打印数组名,输出的是地址值。
  • 但是:char类型数组无论是new还是直接赋值初始化,直接打印后显示的居然不是地址值,而是数组内容。

原因分析

  • char类型的数组就相当于一个字符串。

  • 因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x);

  • 直接打印字符数组的话,不像int[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。

char类型数组输出总结

  • 直接输出数组名:将数组以字符串形式打印;

  • 输出前面加字符:输出的是地址;

  • 输出前面加字符的情况下想要输出数组内容:Arrays.toString(ch),数组内容将以数组形式输出:

  • 代码示例

    String s1 = "HElloworld1234";
    chs = s1.toCharArray();
    System.out.println(chs);
    System.out.println("前边加上字符输出的是地址:"+chs);
    System.out.println("Arrays.toString(ch)以数组形式输出:"+Arrays.toString(chs));

    输出:
      HElloworld1234
      前边加上字符输出的是地址:[[email protected]
      Arrays.toString(ch)以数组形式输出:[H, E, l, l, o, w, o, r, l, d, 1, 2, 3, 4]

小知识:

  • 字符串的话,是不可以变它的内容的。
  • 字符数组的话,你是可以改变数组中包含的内容的。
  • 果往深入了说,字符串的底层也是用数组实现的。
  • 要说使用的区别,字符串方便一些,数组灵活一些。

END

原文地址:https://www.cnblogs.com/anliux/p/12641018.html

时间: 2024-10-16 15:08:49

【JAVA】java中char类型数组用数组名打印结果不是地址值而是数组内容的相关文章

详解Java 8中Stream类型的“懒”操作

在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的方法: 中间操作(Intermediate Operation) 终结操作(Terminal Operation) 官方文档给出的描述为[不想看字母的请直接跳过]: Stream operations are divided into intermediate and terminal operat

在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决?

今天在做 COS脚本解释器的时候,遇到了这个问题 先了解一下 LPCTCHAR 这个东东 LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串. 那么什么叫UNICODE(统一码)??? 背景知识:    计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码.ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个

C++中char类型的溢出问题

C++中什么经常会运用到char类型,也会将char类型作为循环语句的循环条件,但往往这里最容易出现错误,容易出现溢出,进入死循环.这里我们就来简单介绍下为什么会出现这种情况. 首先,了解下char类型的取值范围: char分为无符号(unsigned)和有符号(signed)两种: 无符号(unsigned)的取值范围:0~255: 有符号(signed)的取值范围为:-128~127. 一般我们常用char来声明一个变量,编译器默认为有符号的,即范围为:-128~127. 常见溢出问题: 知

C#和C++中char类型的区别

对于char,这个字符类型.我们一般都认为就是一个字节.今天在仔细比较发现,C#的char和C++的char是有区别的. 1.首先来看C#中char占多大空间 using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {     

JAVA泛型中的类型擦除及为什么不支持泛型数组

一,数组的协变性(covariant array type)及集合的非协变性 设有Circle类和Square类继承自Shape类. 关于数组的协变性,看代码: public static double totalArea(Shape[] arr){ double total = 0; for (Shape shape : arr) { if(shape != null) total += shape.area(); } return total; } 如果给 totalArray(Shape[

Java bean中布尔类型使用注意

JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类. JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolean类型的属性.我们知道对于一个属性来说,如果其命名为test,那么其getter和setter方法一般为getTest()和setTest.但是如果test为一个布尔类型,那么其getter和setter方法为isTest()和setTest().这是一个区别 public class BeanTe

C++中char类型的十六进制字符串转换成字节流

如a[5]="1234"转换成a[5]={0x12,0x34} 代码如下: void HexStrToByte(const char* source, unsigned char* dest, int sourceLen) { short i; unsigned char highByte, lowByte; for (i = 0; i < sourceLen; i += 2) { highByte = toupper(source[i]); lowByte = toupper(

c++中char类型的取值范围

-128~127,数字在计算机中以补码形式存储,因为正数的补码就是其本身且正数符号位置0,故最大值为01111111(一个0七个1)也就是127 而负数是对应正数值取反加一,拿最大的负数-1来说,就是1取反+1 00000001(七个0一个1) 11111110(七个1一个0),加1 11111111(八个1),再加一个就进位变成0 对于最小的负数-128来说 10000000(一个1七个0) 01111111(一个0七个1),加1 1000000(一个1七个0),再减一的话就变成0111111

java高新技术中《九》

一:注解 1.注解(Annotation) 注解相当一个类或接口,每一个注解都是一个实例对象    注解的使用形式:@interface即@注解类名 定义注解类: @interface A {…} 使用了“注解类”的类: @A class B{} 对“使用了注解类的类”进行反射操作: class C { B.class.isAnnotationPresent(A.class); A a=(A)B.class.getAnnotation(A.class); } 2.注解类的生命周期 源文件(.ja