引用数据类型的概念_引用数据类型有哪几种

引用类型 由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱值类型。
引用数据类型的概念 “引用”(reference)是c++的一种新的变量类型,是对c的一个重要补充。它的作用是为变量起一个别名。假如有一个变量a,想给它起一个别名,可以这样写:
int a;int &b=a;
这就表明了b是a的“引用”,即a的别名。经过这样的声明,使用a或b的作用相同,都代表同一变量。在上述引用中,&是“引用声明符”,并不代表地址。
不要理解为“把a的值赋给b的地址”。引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。声明引用并不开辟内存单元,b和a都代表同一变量单元。
注意:在声明引用变量类型时,必须同时使之初始化,即声明它代表哪一变量。在声明一个变量的引用之后,在本函数执行期间,该引用一直与其代表的变量相联系
引用数据类型有哪几种 java提供了两类数据类型:一种是基本类型(原始类型),一种是引用类型。
注意:
1、在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的。比如,int永远占4个字节(1 byte = 8 bit)。
2、void不是基本数据类型
在 java 中基本类型只有八种,详见 java language specification 的 4.2 节:
http://java.sun.com/docs/books/jls/third_edition/html/typesvalues.html#4.2
另外,在 java language specificaion 的第 14.8 节也提及 void 并不是一种类型:
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#5989
为什么《thinking in java》等一些书籍都说,void是基本类型的一种呢?
来看void的包装类java.lang.void源码:
package java.lang;
/**
* the void class is an uninstantiable placeholder class to hold a
* reference to the class object representing the java keyword
* void.
*
* 翻译:void类是一个不可重复的占位符类,
* 用于保存对表示java关键字void的class对象的引用
**/
public final class void { //final表明这个类是不允许被其他类继承
/**
* the class object representing the pseudo-type corresponding to
* the keyword void.
* 翻译:class对象表示对应于关键字void的伪类型。
*/
public static final class《void》 type = class.getprimitiveclass(“void”);
/*
* the void class cannot be instantiated.
* 翻译:void类不能被实例化。
*/
private void() {}
}
1234567891011121314151617181920212223242526
再看getprimitiveclass()方法的源码:
/*
* return the virtual machine‘s class object for the named
* primitive type.
* 翻译:返回指定基本类型的虚拟机的class对象。
*/
static native class getprimitiveclass(string name);123456
“ctrl+alt+h”查看调用getprimitiveclass()方法的所有类,确实是“byte、boolean、short、character、integer、long、float、double、void”一共9个包装类,由此猜测把void也归到基本数据类型的说法可能来源于此。
3、基本数据类型的默认值仅在作为类中属性时生效
在方法内部必须先对基本数据类型变量赋值后才能使用,否则编译不通过。demo如下:
public class defaultvaluetest {
static int inta;
static boolean blna;
public static void main(string[] args) {
int intb;
boolean blnb;
system.out.println(inta); //输出0
system.out.println(blna); //输出false
//system.out.println(intb); //编译不通过
//system.out.println(blnb); //编译不通过
}
}12345678910111213
在程序中如果某些数据可能会返回空值,那么用包装类比较好。比如当结果为空时,转换为int会发生异常,而转换为integer则不会,因为对象可以为null。此时建议用包装类,虽然会牺牲一些转换效率,但可以避免持久化数据时产生的一些异常。
- 引用数据类型
引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。
在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。
引用类型常见的有:string,stringbuffer,arraylist,hashset,hashmap等。
string也属于引用数据类型:
string a = “china”;
string b =a; // 则a、b都指向常量池的“china”。
string a = new string(“china”);
string b =a; //则a、b都指向堆中的“china”。
string a = new string(“china”);
string b =a;
a = a.substring(0,1); //则b指向栈中的“china”,a指向新的对象“c”。12345678
如果要对比两个对象是否相同,则需要使用equals()方法,但有一点需要注意:equals()方法的默认行为是比较引用。如果是你自己写的类,你应该为它重写equals()来比较对象的内容。大多数java类库都实现了比较对象内容的equals()方法。
- 两种类型对比
最后,基本数据类型和引用数据类型的一些对比如下:

国内已设计出14nm香山芯片
ZC-2-10A自动充电机
美国移动运营商U.S. Cellular已授予三星电子一份商业合同
LED照明与CFL节能灯照明的市场对比与前景
虚拟现实头显产品竞争激烈,那么哪款是最好的呢?
引用数据类型的概念_引用数据类型有哪几种
非洲猪瘟检测设备可靠吗以及功能介绍
iphone13mini值得买吗
澳大利亚1.2GW森林风电项目获批,首阶段预计将于2023年底投入运营
全国半导体物理学术会议在浙江杭州成功举行
骨感蓝牙耳机什么牌子好?不伤耳膜的耳机
用两个单功放组成BTL功放电路,BTL power amplifier
西门子PLC实物接线图分享
“瓦力”机器人巡警亮相上海 实现了24小时在户外进行巡逻
Camille bauer 在线电能质量监测仪LINAX PQ系列功能升级
MCU如何满足可穿戴设备的设计需求
简单的开关电源电路图大全(六款简单的开关电源电路设计原理图详解)
ODCC 2023 | 华为数据中心网络荣膺2023开放数据中心大会三项大奖
光合作用测定仪的应用有哪些
富士康或向苹果秘密交付iPad 3(图文)