三九宝宝网宝宝百科宝宝知识

Java里什么是引用类型

04月09日 编辑 39baobao.com

[Java中包含引用数据类型对象的克隆实现]在Ja中,要得到一个对象的完整拷贝不能通过"="实现,因为这样只实现了该对象的引用的拷贝,如果对该对象进行操作,针对的还是同一个对象。那么,如何得到一个对象的拷贝?我们可以通过...+阅读

最简答来说除了8中基本类型以外剩下的都是引用类型 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 boolean -->Boolean char --->Character byte -->Byte short -->Short int -->Integer long -->Long float -->Float double -->Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性,这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。

因为封装类型是对象,所以可以进行相应的很多对象能力函数操作,这样就可以提供很多基本类型难以完成的工作的完成和实现。 你可以通过以下方式来声明该类型。 int a,a为int类型的变量 char a,a为char类型的 String对象 1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”punkll”; String str=new String (“punkll”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。

它包括了关于类、方法、接口等中的常量,也包括字符串常量。 看例1: String s0=”punkll”; String s1=”punkll”; String s2=”punk” + “ll”; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 结果为: true true 首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。 因为例子中的s0和s1中的”punkll”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”punk”和”ll”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”punkll”的一个引用。 所以我们得出s0==s1==s2; 用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

看例2: String s0=”punkll”; String s1=new String(”punkll”); String s2=”punk” + new String(“ll”); System.out.println( s0==s1 ); System.out.println( s0==s2 ); System.out.println( s1==s2 ); 结果为: false false false 例2中s0还是常量池中”punkll”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”punkll”的引用,s2因为有后半部分new String(“ll”)所以也无法在编译期确定,所以也是一个新创建对象”punkll”的应用;明白了这些也就知道为何得出此结果了。

Java中的一些问题关键字:基本数据类型引用数据类型类类型接

1.前边说的基本正确,最后一句不严谨,“并指向新的内存空间”是对的,但未必是“新开辟了一个带有内容的内存空间”因为可以指向另外一个已存在的对象,后者仅在遇见new操作符(或者函数调用里使用了new)才正确。

2.可以被final修饰,也可以修饰此变量所指向对象的内容,但不可变更此变量所指向的对象(即不可以指向新的地址)。

3.属性也可以是基本数据类型。成员变量被static修饰,就是静态变量,意思是可以被这个类的所有对象所共享而已(如果不是private的还可以被其他类或对象访问),或者说,这个变量被绑定到类上而非对象上。因此,它完全可以被更改。

①:static修饰的属性可以被子类调用(只要是protected或public),不存在“覆写”的问题,因为他们各自绑定到不同的类。但是,如果子类类名调用自身未定义的变量或方法,会在父类中找(protected或public的),当然自己重定义就调用自己定义的,用父类类名调用的静态变量调用的是绑定在父类的静态变量(即父类定义的静态变量)。

②:final修饰的变量是常量,用类名直接调用由这个变量是否为static来决定,跟final无关。

4.无论是否静态变量,都可以是基本或引用类型的。

5.①必须是,因为你调用了new A()。另外,对于A a1,那么a1所指向的对象不是A类型的对象也是A的子类的对象。

②对象是变量的一种。变量的本质含义就是一个固定大小的储存空间。对象是变量的一种。同理,类是变量类型的一种。A a2:在不同的语境下,用词不一样。“a1”,本质是一个指向某对象的指针。但我们谈到“a1变量”时,既可以是指a1这个储存空间(出指向了什么对象),也可以指a1所指向的对象,这得根据上下文语境理解。而“a1对象”一般指后者。

6.“对象变量”一般指的是类的非静态成员变量(也就是非静态属性)。

7.常量等价于final所修饰的变量。变量可以是引用类型的,也可以是值类型的。

8.见7,常量跟static八竿子打不着。

另外,你可能提到了一个非常重要的概念区别(在JAVA通常不重要,并没有关键词严格区分):运行时常量与编译时常量。

"dsfsdf":像左边这种字符串是常量,又称字面量,是一种非常典型的编译时常量。

其实严格来说,编译时常量还分两种,但这已经涉及到CPU的运行机制,过于底层,就不再细讲。

以下为关联文档:

java值传递引用传递值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行...

字符串类型引用类型在Java中,数组和String字符串都不是基本数据类型,它们被当作类来处理,是引用数据类型引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。 在java里面...

五线谱里什么是小二度什么是大二度小二度:在五线谱中,相邻的两个音就构成二度音程。但是相邻的两个音之间可能差一个全音,也可能差一个半音。这里,差一个半音的音程就是小二度 。 大二度:自然音阶中,相邻的两个音有...

钢琴谱里什么是和声小调你不能问成“钢琴谱里什么是和声小调” “和声小调”是西方音乐体系里面的大小调里面的其中的一种的小调 如果你有一点音乐基本知识的话,会知道,自然小调就是 从6(La)开始一直...

大神蜜蜡里什么是密鉴定证书,除了 国家珠宝玉石质量监督检验中心 (俗称:国检)的证书可靠以外,其它不一定可信。 至于盐水和荧光试验不足以证明是真货。因为假的一样通过 你这串,按图片看,极像假的,非天...

化学里什么是盐电离时生成金属离子和酸根离子的化合物叫做盐。如 NaCl、KNO3、Al2(SO4) 盐的通性:有些盐有微弱的腐蚀性,溶液的酸碱度根据盐的性质判定,能与某些酸,碱,盐反应,还能和其他某些化合...

英语里什么是复合词??复合词顾名思义是由一些词汇复合形成的,而且有可以复合出各种词类。复合后的词是属于哪种词类,这决定于复合词的后半部词性。下面分别介绍一下复合名词、复合动词、复合形容词...

外国文学史里什么是浪漫主义文学浪漫主义文学产生于18世纪末,在19世纪上半叶达到繁荣时期,是西方近代文学最重要的思潮之一。在纵向上,浪漫主义文学是对文艺复兴时期人本主义理念的继承和发扬,也是对僵化的法国...

英语里什么是复合词?英语里什么是复合词?什么是复合词:复合词顾名思义是由一些词汇复合形成的,而且有可以复合出各种词类。复合后的词是属于哪种词类,这决定于复合词的后半部词性。下面分别说明一下...

推荐阅读
图文推荐