Java中的数组

几乎所有程序设计语言都支持数组。在C和C++里使用数组是非常危险的,因为那些数组只是内存块。若程序访问自己内存块以外的数组,或者在初始化之前使用内存(属于常规编程错误),会产生不可预测的后果(注释②)。

②:在C++里,应尽量不要使用数组,换用标准模板库(Standard TemplateLibrary)里更安全的容器。

Java的一项主要设计目标就是安全性。所以在C和C++里困扰程序员的许多问题都未在Java里重复。一个Java可以保证被初始化,而且不可在它的范围之外访问。由于系统自动进行范围检查,所以必然要付出一些代价:针对每个数组,以及在运行期间对索引的校验,都会造成少量的内存开销。但由此换回的是更高的安全性,以及更高的工作效率。为此付出少许代价是值得的。
创建对象数组时,实际创建的是一个句柄数组。而且每个句柄都会自动初始化成一个特殊值,并带有自己的关键字:null(空)。一旦Java看到null,就知道该句柄并未指向一个对象。正式使用前,必须为每个句柄都分配一个对象。若试图使用依然为null的一个句柄,就会在运行期报告问题。因此,典型的数组错误在Java里就得到了避免。

也可以创建主类型数组。同样地,编译器能够担保对它的初始化,因为会将那个数组的内存划分成零。
数组问题将在以后的章节里详细讨论。

时间: 2024-12-11 20:46:42

Java中的数组的相关文章

字符-java 中byte数组转换问题,求思路

问题描述 java 中byte数组转换问题,求思路 现在做的项目有一个byte数组转换的问题,思考很久没有思路,求各路大神给点意见. 需求 :将一个byte数组中的每个元素拆分成两个byte.分别保存前一个byte中的16进制两位的内容的ascii码. 事例 : byte[] a = {0x24,0xBD}; byte[] b = new byte[4]; 想得到的结果: b[0] == 0x32; b[1] == 0x34; b[2] == 0x42; b[3] == 0x44;

java中String数组问题,String[3][2]是表示有6个对象吗?

问题描述 java中String数组问题,String[3][2]是表示有6个对象吗? String[ ][ ] zhuangtai=new String[3][2]; 是表示有6种不同的状态吗,如何理解呢?新手提问,莫见笑 解决方案 上面的错了,应该都是从00开始 这是一个二维数字,里面可以存储6个属性 分别为[0][0] [0][1] [1][0] [1][1] [2][0] [2][1] 你可以看下我这篇文章http://blog.csdn.net/zhanggang740/article

在java中一维数组和二维数组有什么区别吗?

问题描述 在java中一维数组和二维数组有什么区别吗? 求大神指点java中一维数组和二维数组的区别,为什么一位数组是一行 二维数组可以定义多行 解决方案 如图黑色的是一维数组红色的是二维数组一维数组用来存数据二维数组用来存一维数组 解决方案二: JAVA中一维数组和二维数组的定义一维数组及二维数组的用法java中arraylist和一维数组二维数组的转换 解决方案三: 一楼正解,一维和二维的区别就是线和面的区别,一维的数组你就可以通过一个下标来准确定位,而二维的就需要有两个就像坐标系一样,一维

java中创建数组时内存怎么分配????

问题描述 java中创建数组时内存怎么分配???? int[] arr=new int[3]; 问题: 上面创建int数组时,怎么分配内存的?arr是一个引用变量,是通过指针指向new int[3](存在堆里面)对吧,那么,栈里面为arr分配几个指针,是3个还是1个? 补充: 疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是"数组长度"个? 疑问2****: 如果是一个,那么,这个指正指向谁???? 疑问3****: 如果指向的是第一个元素,那么,该

java中的数组类型的数据能存储到栈空间吗

问题描述 java中的数组类型的数据能存储到栈空间吗 我们知道堆空间存储大数据,栈空间的数据先进后出, java中的数组类型的数据能存储到栈空间吗 解决方案 基本类型产生了一个值存放在栈中,变量的值就是栈的地址处的值. 引用类型则产生了一个对象,存放在内存堆中,同时将内存堆对象的指针地址(引用地址)存放在了栈中,变量的值实际是栈中的引用地址. 解决方案二: java中所有对象和数组都是在堆上分配内存的,,栈内存用来存放局部变量 解决方案三: java 存储不同类型数据Java实现登录.注册(使用

关于java中消除数组中的重复值的问题,麻烦大家了

问题描述 关于java中消除数组中的重复值的问题,麻烦大家了 public static void getLength(int[] arr){ int count=0; int i; for(i=0;i<arr.length-1;i++){ if(arr[i]==arr[i+1]) count++; arr[i]=arr[i+1]; } for(int x=0;x<arr.length-count-1;x++){ System.out.print(arr[x]+" ");

java 中new 数组和 new 构造方法有何区别和联系

问题描述 java 中new 数组和 new 构造方法有何区别和联系 java 中new 数组和 new 构造方法有何区别 在这里数组和构造方法都是一个类的行为吗 解决方案 new关键字是创建对象的,对象初始化时会调用类的构造方法,所以你这个new构造方法的说法是不对的.数组也是一种对象,所以new数组本质也是创建对象的,但是数组初始化数组的过程与类有差别的,创建数组的方法遵守Java语法规定. 解决方案二: new数组 java自动帮你调用构造方法实例化数组对象 相当于多次调用构造方法

js接收并转化Java中的数组对象的方法_javascript技巧

在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进行内容的转化,后来发现不可以,网上说js与java没有桥接的东西,所以呢: 我的解决方案是:在action层,将java的对象数组转化为Json串,而在js中,再把json转化为数组对象. 1.将java的对象数组转化为Json串: 要用到两个类: net.sf.json.JSONObject ne

基于java中byte数组与int类型的转换(两种方法)_java

java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

Java中char数组(字符数组)与字符串String类型的转换方法_java

本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordField组件时,如果要获得密码值,就需要使用该组件的getPassword()方法.jPasswordField的getPassword()方法返回一个char类型的数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作.这时,就需要将char类型的数组进行转换.当然也经常会遇到