arrays-java-adding groups of elements

问题描述

java-adding groups of elements

想请问这个method: Arrays.asList() 参数值可以是一个数组,如果是对象数组,处理时没有问题;但是在处理基本类型数组却出现问题。对比结果简化描述如下:
Integer[] moreInts = {6, 7, 8, 9, 10};
int[] arr = {11, 12, 13, 14, 15};

    System.out.println(Arrays.asList(moreInts)); -->可以返回数组
    System.out.println(Arrays.asList(arr));--> 系统给出的值却是[[I@7f31245a]

我的问题在于:
1)Arrays.asList()返回的类型应该是List, 为什么系统给的值却是[I (代表是int 数组)
2)为什么不能像处理对象数组一样,返回这个数组?

多谢回答!

多谢回答

解决方案

Arrays.asList(T... a)是asList方法的签名,这里T是范型,也就是T extends Object,在java里,primitive type和object并没有继承关系,而primitive数组是object的子类,你可以测试一下System.out.println(new int[10] instanceof Object);这会输出true。
所以在第一个调用。传入的参数被编译器解释成了Integer[]类型,而第二个调用被解释成了int[][].
至于为什么不能把primitive数组当成对象数组那样处理,主要是因为向前兼容,在Java设计之初,primitive type就没有当作object类型而是单独处理的(原因是对象类型需要align,得另外占用空间). oracle现在希望能消除这个界限,在JDK 10我们也许可能看到primitive type和object的统一。

时间: 2024-08-04 07:35:23

arrays-java-adding groups of elements的相关文章

Java Thread Programming 1.7 - Concurrent Access to Objects and Variables

access|object When multiple threads are interacting with an object, controls need to be in place to ensure that the threads don't adversely affect one another. This chapter deals with issues that can introduce subtle errors in your application. An ap

Java学习笔记

笔记 本笔记是在看浙大翁恺老师的视频教学时所做,希望对Java初学者有帮助! 一.Java基础1.正确认识Java(1)Java是一种有生产力的OOP语言,C++能做的Java都能做(2)Java与网络关系不大,更不是用来做网页的(3)Java是UNIX世界的产物,具有UNIX的思想(4)Java在国外广泛的被用来做各种应用2.Java历史(1)Brithday:May 23,1995(2)1991:Set-Top box:Jame Gosling(3)1994:OAK and FirstPer

java的数组初始化

在C中初始化数组极易出错,而且相当麻烦.C++通过"集合初始化"使其更安全(注释⑥).Java则没有象C++那样的"集合"概念,因为Java中的所有东西都是对象.但它确实有自己的数组,通过数组初始化来提供支持. 数组代表一系列对象或者基本数据类型,所有相同的类型都封装到一起--采用一个统一的标识符名称.数组的定义和使用是通过方括号索引运算符进行的([]).为定义一个数组,只需在类型名后简单地跟随一对空方括号即可: int[] al; 也可以将方括号置于标识符后面,获

Java官方文档索引

之前一直感觉Java的官方文档有些杂乱,最近特意整理了一下,仅供参考. 入口 Oracle官方文档入口:http://docs.oracle.com/.下级页面这边只整理了JavaEE跟JavaSE的文档. JavaEE JavaEE文档入口:http://docs.oracle.com/javaee/.下级页面有JavaEE相关的API跟Tutorial文档: http://docs.oracle.com/javaee/7/api/ http://docs.oracle.com/javaee/

Java编译概览

概述 将源文件编译成类文件并不是一个简单的过程,通常可以分成三个阶段.这个过程遵循按需处理的原则,因此不同源文件处理的速度不尽相同. 这个过程由JavaCompiler来完成. 由命令行参数所指定的所有源文件会被parse成语法树,所有外部可见的定义都会enter到编译器的符号表. 调用所有适当的注解处理器.如果注解处理器产生了新的源文件或类文件,编译过程将重新开始,直到没有新的文件产生. 最后,解析器生成的语法树会被分析并转换成类文件.在分析的过程中,可能会发现其他的被引用到的类(译者注:不是

byte-java 上传大文件(1G)报错 java.lang.OutOfMemoryError

问题描述 java 上传大文件(1G)报错 java.lang.OutOfMemoryError java.lang.OutOfMemoryError: Java heap space java.util.Arrays.copyOf(Arrays.java:2271) java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113) java.io.ByteArrayOutputStream.ensureCapacity(Byt

Java内存区域与内存溢出

内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈.Java堆.方法区.下面详细阐述各数据区所存储的数据类型. 程序计数器(Program Counter Register) 一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支.跳转.循环等基础功能都要依赖它来实现

[jjzhu学java]深入理解JVM笔记之内存管理机制

深入理解JVM笔记之内存管理机制 运行时数据区域 程序计数器 JVM栈 本地方法栈 Java堆 方法区 运行时常量池 直接内存 对象访问 OutOfMemoryError异常 Java堆溢出示例 JVM栈和本地方法栈溢出 运行时常量池溢出 本机直接内存溢出 深入理解JVM笔记之内存管理机制 运行时数据区域 程序计数器 每个线程都有一个程序计数器(PC),是当前线程所执行的字节码的行号指示器,通过改变程序计数器的值来选取下一条指令.各线程之间的计数器互不影响,是线程私有的内存. 如果线程执行的是一

java heap space 异常

问题描述 在eclipse中运行,连接的是Oracle数据库.从别的表读出来,插到另一个表中.有10万条的数据,当插到8万条的时候,出现如下异常: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(Abstr