输出意味着什么...
如果我们打印'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);
}
}