数组可以做一些令人惊讶的事情。

是否是数组?

Serializable array = new Serializable[9];

数组是数组还是标量? 好吧,它是指向数组的标量。 就像

Object o = new Object[9];

您可以将数组分配给对象,因为它也是对象。 但是,数组也是可序列化的,因此您可以将它们分配给可序列化。

我的[]去了哪里?

[]可能出现在令人惊讶的地方。 出于后向可比较性原因进行编译。

public static int method(int[]... args)[] {return args[0];
}

这里的类型是; args是int [] [],返回类型是int []。 您在方法声明后注意到[]了吗? 这不是JLS的一部分,并且由于向后兼容的原因,OpenJDK允许这样做。

之后的内容有所不同。

int[] array, x[];

int array[], y[];

在这些情况下; x是int [] []但y只是int [] 。

如果数组初始化太大,会发生什么?

说我初始化这样的数组

public static final int[] VALUES = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,/* many, many lines deleted */1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
};

错误消息是;

Error:(6, 31) java: code too large

这似乎有点奇怪。 它不会抱怨数组太大。 实际上,如果我有更多的静态字段或使用较大的常量,则对于较小的数组它将失败。
发生这种情况是因为数组是用字节码初始化的。 字节码创建数组并初始化每个值,一次初始化一个。 这会导致大量用于大型数组的代码,如果方法的大小没有限制,这将是一个问题。 即65535字节。 编译器只为构造函数或静态初始化生成一种方法,因此这限制了您可以拥有的枚举数和初始化数组的大小。

翻译自: https://www.javacodegeeks.com/2014/04/java-arrays-wat.html

Java数组,Wat!相关推荐

  1. java数组简单介绍以及其方法

    小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...

  2. java 数组 反射_java数组的反射

    java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...

  3. java 2维数据便利_计算机等级考试二级java数组辅导

    数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 注意: ...

  4. (二十六)、Java数组在内存中如何存放与分配

    Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说是一样的,因为数组也是一个 ...

  5. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01;import java.sql.Array; import ...

  6. Java数组的基本操作方法整理

    数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数 ...

  7. Java数组常见操作

    Java数组常见操作 文章目录 Java数组常见操作 7.0 数组的遍历 1.使用foreach循环访问数组中每个元素. 2.使用简单的for循环(多层循环嵌套)来遍历数组. 7.1 数组长度 7.2 ...

  8. Java 数组转型和范型

    今天写代码遇到一个奇怪的问题,代码结构如下: [java] view plaincopy print? ArrayList<String> list = new ArrayList< ...

  9. 1.1 Java数组简介:数组是什么?

    在某些情况下,虽然可以使用单个变量来存储信息,但是如果需要存储的信息较多(例如存储 50 名学生的成绩),这时再依次创建变量声明并赋值显得非常麻烦. 随着处理的信息量越来越大,工作也就越来越烦琐,这时 ...

  10. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用

    Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...

最新文章

  1. php 對象轉換成數組,PHP錯誤:陣列對象轉換成關聯數組
  2. 从来都没有爱情发生的人生
  3. “中序表达式”转“后续表达式”
  4. 【HAOI2010】订货
  5. [Flex]关于国内Flex开发者/从业者的调查问卷
  6. Java B2B2C多用户商城 springcloud架构- 企业云架构common-service代码结构分析(六)...
  7. linux VNC白屏,VNC使用及其常见问题解决方法
  8. 单片机STM8S测量电压电路_STM32单片机的高精度超声波测距系统的设计
  9. cocos2dx游戏开发简单入门视频教程 (cocos2d-x)- 第4天
  10. 设置返回IOS开发(26)之UITableView的页眉和页脚
  11. 读者试读怎么评价这本书
  12. C#中用ToString方法格式化时间
  13. SpringBoot集成Jsoup爬虫——三级列表
  14. 登录个税显示局端服务器显示,天津金税三期个人所得税扣缴系统
  15. Hive | 用sort_array函数解决collet_list列表排序混乱问题
  16. 学习日记——Quartus工程创建与运行
  17. 矩阵标准型的系数是特征值吗_21、二次型、合同关系、惯性指数、标准型、规范型,XTAX...
  18. Python安装包时遇到There was a problem confirming the ssl certificate…的解决办法
  19. android中的所有activity间动画跳转
  20. UML图之五——时序图

热门文章

  1. java计算出生到现在经历了多少天
  2. strcompare php,PHP中的startswith()和endsWith()函数
  3. HashMap的实现原理及其特点
  4. php array分组,php数组分组简单例子
  5. spring中stereotype注解Component,Repository,Service,Controller
  6. java前台线程(普通线程) 和 后台线程
  7. java流与文件——内存映射文件
  8. orelse_可选的orElse vs orElseGet
  9. aws 删除ec2实例_如何在AWS中启动EC2实例
  10. web前端面试问答_Web服务面试问答