博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java笔记——引用类型
阅读量:5270 次
发布时间:2019-06-14

本文共 1913 字,大约阅读时间需要 6 分钟。

一、引用数据类型

  • 引用数据类型是一种组合型数据类型,就类似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

转载于:https://www.cnblogs.com/ybucoding/p/7903251.html

你可能感兴趣的文章
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
daydayup2 codeforces143C
查看>>
ANT打包J2EE项目war包
查看>>
UESTC-我要长高 DP优化
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>
java易错题----静态方法的调用
查看>>
php建立MySQL数据表
查看>>
最简单的线程同步的例子
查看>>
JSP、Servlet乱码终极解决方案
查看>>