赞
踩
其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
其元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
- dataType[ ] arrayRefVar = new dataType[ arraySize];
-
- dataType[ ][ ] arrayRefVar = new dataType[ arraySize][ arraySize];
- public class Main {
- public static void main(String[] args) {
- int[] a = {1, 2, 3};
- a[0] = 0;
- for(int i : a) {
- System.out.println(i); //这里会输出什么?
- }
- }
- }
- public class Main {
- public static void main(String[] args) {
- String[] names = {"ABC", "XYZ", "zoo"};
- String s = names[1];
- names[1] = "cat";
- System.out.println(s); // s是"XYZ"还是"cat"?
- for(String i : names) {
- System.out.println(i); //这里会输出什么?
- }
- }
- }
结论:输出"ABC" "cat" "zoo"。分析见下。
注意数组是引用类型,并且数组大小不可变。我们观察下面的代码:
- public class Main {
- public static void main(String[] args) {
- // 5位同学的成绩:
- int[] ns;
- ns = new int[] { 68, 79, 91, 85, 62 };
- System.out.println(ns.length); // 5
- ns = new int[] { 1, 2, 3 };
- System.out.println(ns.length); // 3
- }
- }
本例中,ns指向了新的内存地址,其本身(原地址)被垃圾回收机制回收。(可能是吧,我是垃圾,并不清楚)
如果数组元素不是基本类型,而是一个引用类型,那么,修改数组元素会有哪些不同?
字符串是引用类型,因此我们先定义一个字符串数组:
字符串数组存放的是 各字符串常量的 地址!
String[] names = { "ABC", "XYZ", "zoo" };
思考下面这个例子(从引用的指向分析):
思考下面这个例子:
- public class Example{
- String str=new String("tarena");
- char[]ch={'a','b','c'};
- public static void main(String args[]){
- Example ex=new Example();
- ex.change(ex.str,ex.ch);
- System.out.print(ex.str+" and ");
- System.out.print(ex.ch);
- }
- public void change(String str,char ch[]){
- //引用类型变量,传递的是地址,属于引用传递。
- str="test ok";
- ch[0]='g';
- }
- }
数组的定义类型为父类类型,里面保存的多态元素为子类类型。
- public class Person {
- public static void main(String[] args) {
- Person[] person = new Person[4];
- person[0] = new Person("jack",20);
- person[1] = new Person("lucy",10);
- person[2] = new Student("mary",8,2000);
- person[3] = new Teacher("hsp",20,88888);
- for(Person p : person) {
- System.out.println(p);
- }
-
- }
- protected String name;
- protected int age;
-
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- @Override
- public String toString() {
- return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
- class Student extends Person{
- private double salary;
- public Student(String name, int age, double salary) {
- super(name, age);
- this.salary = salary;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", salary=" + salary +
- '}';
- }
- }
- class Teacher extends Person{
- private double salary;
- public Teacher(String name, int age, double salary) {
- super(name, age);
- this.salary = salary;
- }
-
- @Override
- public String toString() {
- return "Teacher{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", salary=" + salary +
- '}';
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。