引用数据类型和基本数据类型区别
原创
©著作权归作者所有:来自51CTO博客作者小龙在山东的原创作品,请联系作者获取转载授权,否则将追究法律责任
Java 中的数据类型分为基本数据类型和引用数据类型。
引用数据类型和基本数据类型的相同点:
- 都可以用来创建变量,可以赋值和使用其值
- 本身都是一个地址
引用数据类型和基本数据类型的不同点:
- 基本类型变量的值,就是地址对应的值。引用数据类型的值还是一个地址,需要通过“二级跳”找到实例
- 引用数据类型是Java的一种内部类型,是对所有自定义类型和数组引用的统称,并非特指某种类型。
- 使用 new 操作符可以创建某个类的一个实例。在 Java 程序运行的时候,所有这些创建出来的实例都被Java放在内存里一个叫做堆(heap)的、类似公告板的地方
- 创建一个实例,就是根据类的定义,点出需要的“纸”,订成一个本子,挂在布告板上。实例本身,可以认为是一个小本子
- 引用里存放的,相当于某个本子所在的布告板的地址。
引用数组
public class News {
String title;
}
public class RefArray {
public static void main(String[] args) {
News[] news = new News[10];
news[0] = new News();
news[0].title = "标题";
System.out.println(news[0].title);
// 查看缺省值(引用类型默认是null)
System.out.println(news[1]);
// 遍历
for (int i = 0; i < news.length; i++){
news[i] = new News();
news[i].title = "标题" + i;
System.out.println(news[i]);
}
}
}
覆盖
public class News {
public String title;
public String getTitle() {
System.out.println("调用了News.getTitle方法。");
return "News.getTitle";
}
}
public class News1 extends News {
@Override
public String getTitle() {
return "News1.getTitle";
}
}
public class News2 extends News {
@Override
public String getTitle() {
return "News2.getTitle";
}
}
public class News3 extends News {
@Override
public String getTitle() {
return "News3.getTitle";
}
}
public class NewsMain {
public static void main(String[] args) {
News[] allNews = new News[3];
allNews[0] = new News1();
allNews[1] = new News2();
allNews[2] = new News3();
for (int i = 0; i < allNews.length; i++) {
System.out.println(allNews[i].getTitle());
System.out.println(((News)allNews[i]).getTitle());
}
}
}
结果:
News1.getTitle
News1.getTitle
News2.getTitle
News2.getTitle
News3.getTitle
News3.getTitle
覆盖跟引用的类型没关系,而是根据引用所指的实例来调用方法。
重载
public class NewsOverload {
public short getValue(short value) {
return value;
}
public int getValue(int value) {
return value;
}
public String getValue(String value) {
return value;
}
public double getValue(double value) {
return value;
}
public String getValue(String value1, String value2) {
return value1 + value2;
}
}
public class OverloadMain {
public static void main(String[] args) {
NewsOverload newsOverload = new NewsOverload();
short short1 = 1;
System.out.println(newsOverload.getValue(short1));
int int1 = 2;
System.out.println(newsOverload.getValue(int1));
System.out.println(newsOverload.getValue("String"));
System.out.println(newsOverload.getValue("String1", "String2"));
}
}
结果:
1
2
String
String1String2
重载调用哪个方法,和参数的引用类型和个数相关,和引用实际指向的类型无关。
还可以把本例中的short、int、String等类型改为类。