Java从控制台接受数组_关于java:在控制台上打印数组参考变量

本文探讨了在Java中从控制台打印数组时的输出现象,解释了[I @ 546da8eb等表示的意义,指出这实际上是数组对象的哈希码。建议使用Arrays.toString()方法获取更清晰的数组内容输出。
摘要由CSDN通过智能技术生成

输出意味着什么...

如果我们打印'intarray'我们会得到一些哈希码...

&与" floatarray"相同

但是如果我们打印'chararray'我们什么也得不到

以下数据是什么意思?

class Test

{

public static void main(String []aeg)

{

int []intarray = new int[5];

char []chararray = new char[5];

float []floatarray = new float[5];

System.out.println(intarray);

System.out.println(chararray);

System.out.println(floatarray);

}

}

输出从这里开始

在控制台上打印后,我们得到以下输出...。

F:\Mehnat\my sc\By me\ArrayList\2\2>javac Test.java

F:\Mehnat\my sc\By me\ArrayList\2\2>java Test

[I@546da8eb

[F@6b6d079a

输出在这里结束

一个猜测:char[]被打印为字符串。 由于其全部为空字符,因此不打印任何内容。

你的猜测是正确的。

是的,我的猜测也是如此,但是[I @ 546da8eb和[F @ 6b6d079a]是什么意思???

打印字符数组会尝试将字符串的内容打印为字符串(一次一个字符)。您的新数组将填充未打印的空字符。尝试用一些东西填充它,然后再次检查:

chararray[0] = 'H';

chararray[1] = 'e';

chararray[2] = 'l';

chararray[3] = 'l';

chararray[4] = 'o';

System.out.println(chararray);

应该打印Hello

您正在看到此行为,因为PrintStream.println的重载占用了char[]。从该方法的文档中:

Prints an array of characters and then terminate the line.

当然,数组的元素尚未初始化,因此它们都是默认的char,即'\u0000',即空字符。如果用可见字符填充数组,您将可以看到结果:

char[] charArray = new char[] {'a', 'b', 'c', 'd', 'e'};

System.out.println(charArray); //prints"abcde"

其他方法调用使用的是println(Object),它会打印对象的toString的结果。数组不会覆盖toString,因此您会看到默认Object.toString实现的结果:

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

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

作为一种解决方法,Arrays实用工具类提供了toString辅助方法,以获取数组的String表示形式。例如:

int[] intArray = new int[] {1, 2, 3, 4, 5};

char[] charArray = new char[] {'a', 'b', 'c', 'e', 'f'};

float[] floatArray = new float[] {1.0F, 1.1F, 1.2F, 1.3F, 1.4F};

System.out.println(Arrays.toString(intArray));   // [1, 2, 3, 4, 5]

System.out.println(Arrays.toString(charArray));  // [a, b, c, e, f]

System.out.println(Arrays.toString(floatArray)); // [1.0, 1.1, 1.2, 1.3, 1.4]

是的,这是正确的,但这是什么意思---- [I @ 546da8eb

@YogeshVerma:多数民众赞成在数组的字符串表示形式。符号的含义不同(如果您真的很好奇,可以查找Java字节码-告诉我它在某个地址的整数数组),但是,如果要使用数据,请使用Arrays.toString(intArray)。

Float [] Floatarray = new Float [5]; System.out.println(Floatarray);我们得到[Ljava.lang.Float; @ 50c8d62f,这意味着该数组是Float类型的...。但是在我的程序中,如果我们打印原始类型的数组,是否意味着它也是一个类???

@YogeshVerma我不太清楚您要问什么,但是所有数组都是对象(引用类型),包括原始数组。出于任何原因,int[]的"类名"都是" [I"。

这些类所在的位置?可以看到这些类吗?

@YogeshVerma不,数组类型是特殊的,其类由JVM提供。请参阅此帖子以获取更多信息:stackoverflow.com/a/8546532/697449

这是因为数组仅包含指向每个其他元素的内存地址。它被称为"指针",是一个编程概念,将来可能会彻底挫败您。但是,打印char []数组会作为String重载,因为String实际上只是一个char数组。

但是在Java中没有内存地址。我们只能得到数组的哈希码????我只是想知道[I @ 546da8eb是什么意思???

好吧,它是一种内存地址。它是一个身份哈希码:专门用于识别事物的哈希码。是的,Java中有内存地址,您不能应用它们。每当创建对象时,该对象实际上并不"包含"其中的所有值,而仅指向它们。结果,您可以使对象具有其自身的字段,并且不会因递归而用完内存。例如,Object o = new Object(); o.setObject(o);

字符

以16位Unicode' u0000'表示为' uFFFF'。

在算术运算中可以视为[0,65535]范围内的16位无符号整数

int []intarray = new int[5];

默认值是0;

char []chararray = new char[5];

新数组填充有未打印的空字符

float []floatarray = new float[5];

Ex:

class Whatever {

public static void main(String args[]) {

char[] hello = { 'h', 'e', 'l', 'l', 'o', '.'};

String hello_str = new String(hello);

System.out.println(hello +"" + hello_str);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值