一、引用数据类型
引用数据类型是一种组合型数据类型,就类似C语言中的struct结构体,将不同的数据类型组织在一起。引用数据类型一共有四种,数组,接口,类,枚举。
引用类似c语言的指针,指向内存中对象的地址。
引用类型定义变量就叫的对象。当多个引用只向同一个对象时,其实指向的是同一个内存地址。
例子
public class demo { private String word; public void setWord(String word){ this.word = word; } public String getWord(){ return word; } public static void main(String[] args) { demo s1 = new demo(); s1.setWord("我是s1对象"); demo s2 = s1; s2.setWord("我是s2对象"); System.out.println(s1.getWord()); // System.out.println(s2); System.out.println(s1); }}
输出结果:
我是s2对象Text.demo@5c3f1224Text.demo@5c3f1224
我们可以看到,s1.getWord()返回的是“我是s2对象”,而后面输出的内容更加清晰,s1和s2两个对象的内存的地址是一样的,所以它们引用的是同一个对象。
通过这个例子我们可以很清楚的了解到:引用指向的是对象,但引用它本身不是对象。
- 声明引用类型变量时,并不为对象分配内存空间
String s; //并没有为对象分配空间 s = new String("hello");
对比C语言
String *p; p = (String *)malloc(sizeof(String));
总结: 引用类似C语言的指针,指向的内存中的对象。但是这个并不是真正的指针。
二、枚举类型
枚举类型,使用关键字enum,用常量名表示一组常量。
三、数组
在java中数组是引用类型,在堆(heap)中动态分配内存。 另外java类库中还专门提供了一个java.util.Arrays类,方便我们对数组进行操作。
[注:] 每个数组都有一个内置变量length,表示数组的长度。
1.数组的声明和实例化
//声明和实例化分开 //String[] str; //第一种String str[]; //第二种,两种声明方式都可以str = new String[10]; //实例化一个数组//声明和实例化合并String str2[] = new String[10];
注意:在声明时不要指定数组大小,我们在后面实例化的时候(在内存中申请空间时)指定数组大小。
- 数组的初始化 数组在初始化的时候,会默认为数组中的元素进行赋值。
数据类型 | 默认值 |
---|---|
基本数据类型 | 0 |
boolean | false |
引用类型 | null |
我们也可以不用默认初始化的方式。直接在声明数组的同时给每个元素进行赋值。
int a[] = {1,2,3,4,5};String s[] = {"welcome","to","China"};
【注】 当数组中的元素为引用类型的时候,我们需要注意,在为数组声明并初始化之后,这时候数组中的元素的默认值都是null,它们并没有指向任何对象。所以我们还需要为每个对象分配内存,让数组中的元素不在是空,而是指向内存中的对象。
String s[] = new String[4]; System.out.println(s[0]);
输出结果:
null
所以我们可以看到,它并没有指向任何对象。所以我们要单独为每个元素分配内存。我们上面的代码修改如下
s[0] = new String("hello");System.out.println(s[0]);
输出结果为:
hello
总结: 数组在java中是引用类型。另外要注意在创建对象数组的时候,先为数组分配内存空间,然后为数组中的元素一 一分配空间。
参考文章 : http://blog.sina.com.cn/s/blog_453d87aa01016tkv.html