一.基本类型与引用类型的值
在计算机高级语言变量中包含两种不同数据类型:基本类型与引用类型.基本类型指那些保存在栈内存中的简单数据段,也就是说这些变量的值完全保存在栈内存中,而引用类型值指那些保存在堆中的对象,这就是说,引用类型变量在栈中保存的只是一个指向堆中指定对象的 指针而已,为什么要这么做呢,因为对象大小不能固定,而基础类型大小是固定的,如int型就占4个字节(不同语言,平台有所差异),我们可以将固定大小的放在一个数据结构中,如果是基础类型直接取值,如果是引用类型首先从栈中读取内存地址,然后顺藤摸瓜,根据地址找到在堆中的值,这样可以提高我们的查询速度,
JAVA中的基础类型有int,char,byte,long,short,boolean,特别注意String不是基础数据类型,但在javascript中ECMAScript放弃这一传统,将String作为基础数据类型.栈堆关系如下图,一目了然:

二.复制变量值
除了保存方式不同外,基础数据类型与引用同数据类型在复制变量时也不一样,如下例所示程序:
int num1 = 5;
int num2 = num1;
num2 = 10;
System.out.println(num1); //5
System.out.println(num2); //10
初始变量num1的值等于5当将变量num1的值赋于变量num2,num2也保存了5的值,但这两个5的值是完全独立的,在num2中的5只是num1中的5的一个副本而已,相信这点大家很容易理解,下面配合图标将这次赋值过程展现出来:


对于引用变量的复制,实质上,我们复制的是栈内存中的指针,也就是复制变量的指针的副本,复制后两个变量指向同一个对象,相信这一点也不难理解,惯例图表展现:
Person p1 = new Person();
p1.setName("复制前所赋值");
Person p2 = p1;
p2.setName("复制后所赋值");
System.out.println(p2.getName());// 复制后所赋值

三.参数传递
与变量复制一样,参数传递基础类型与引用类型也存在差异,在java这门计算机语言中,非常多的书籍都会写到基础数据类型是值传递,而引用类型是引用传递,其实我赞同前半句,不过对后半句有异议,后面再谈,首先先来看看基础类型的值传递.
在向参数传递基本类型的值的时候,被传递的变量的值会复制给函数的一个局部变量,局部变量所对应的内存中会参数被传递变量值的副本,所以当我们修改局部变量时被传递变量不会发生改变:
public static int addNum(int num) {
num += 100;
return num;
}
int num = 10;
int result = addNum(num);
System.out.println("操作后的num :" + num); // 10
System.out.println("结果result :" + result); // 110
函数addNum()有一个参数num当我们使用变量num传入时,实际上是在addNum函数作用域内产生一个num局部变量,该局部变量的值是被传入参数值的副本,当我们修改局部变量时,外层变量不会发生改变,所以我们最后打印的时候外层变量仍然为10并没有受到函数参数自增100的影响。
前面已经对引用类型参数传递的一些看法,下面我们先来看一个例子:
public static void setName(Person p) {
p.setName("作为参数后的值");
}
Person p = new Person();
p.setName("作为参数前的值");
setName(p);
System.out.println(p.getName()); // 作为参数后的值
从上面例子可以看出,当我们创建一个对象后,调用函数对对象的属性进行修改,发现函数外层的对象也跟着修改了,可以看出参数p与外层对象p指向的是堆内存中的同一个对象,换句话说,这应该是一个值传递,因为前面我们已经说过,在栈内存中引用类型变量保存的是堆内存中对应对象的地址,所以参数获得了一个被传递变量的指针类型副本,下面我们再来看一个例子 :
public static void setName(Person p) {
p.setName("操作前名称");
p = new Person(); // 使参数指向新的堆地址
p.setName("操作后的名称");
}
Person p = new Person();
setName(p);
System.out.println(p.getName()); // 操作前名称
与前一个例子相比,我们在setName函数中先对参数p赋值,然后让参数p指向一个新的对象,再赋值,结果打印出来的信息是我们在使得参数P指向一个新的对象之前所做的操作,也就是说并没有修改原被传递参数的指针信息,所以同样为值传递(javascript也是一样的)。

- 大小: 14.8 KB

- 大小: 7.7 KB

- 大小: 10.2 KB

- 大小: 26.7 KB
分享到:
相关推荐
* 懂得(II):能将所学知识加以解释、归纳,能领会某一概念或者原理与其它概念或者原理之间的联系,懂得其引申意义,并能做出正确的表述与解释。 * 应用(III):通常能用所学的概念、原理、方法正确分析与解决较简单的...
6. **参数传递**:基本数据类型作为参数时,是值传递,而对象作为参数时,是引用传递,因此可以通过对象参数改变实参的值,选项B正确。 7. **继承关系**:在Java中,一个子类只能有一个父类,但一个父类可以有多个...
- **后续发展**: 本课程将重点讲解C++语言的基础内容,并引申到面向对象的程序设计。 #### 三、课程教学内容 - **总学时**: 72小时(理论42小时+上机30小时)。 - **第一章: C++的初步知识** - **从C到C++**: 发展...
描述中虽然没有具体的信息,但我们可以从中引申出C++的一些关键知识点。C++的核心特性包括: 1. 面向对象:C++支持面向对象编程(OOP)概念,如封装、继承和多态性。封装允许我们隐藏实现细节,提高代码的安全性...
09_数据类型引申和思考 10_变量本质剖析和内存四区模型引出_传智扫地僧 11_c的学习重理解到位_对初学者_传智扫地僧 12_直接通过内存标号操作内存空间_课堂答疑 13_中午课程回顾 14_内存四区基本原理_全局区案例理解 ...
12. **创新的本质与类型** - 创新的本质是新和突破,而创新类型包括原创型、组合型、模拟型等多种形式,这些都在不同层面推动着社会进步。 这些知识点揭示了创新型人才的培养方向和创新思维的核心要素,对于个人...
【综合题】训释性质的三种类型包括:直训、引申、比喻等,它们之间相互联系,共同帮助理解古文的深层含义。例如,直训直接解释词的本义,引申通过词语的演变来扩展意义,比喻则借助类比来阐释难以言表的概念。 ...
9. 家国一体观念:强调家庭与国家的关系,反映出中国传统社会的政治结构特点,即家是国的基础,国是家的延伸。 10. 宗教伦理与政治:家长制的论述揭示了伦理道德如何在封建社会中作为政治统治的手段。 综上所述,...
1. **符合试题规定的文体要求**:考试题目可能会指定特定的文体类型(如记叙文、议论文等),考生需要严格按照要求进行写作。 2. **符合考生已设定的文体要求**:当题目允许“文体自选”时,考生可以根据自己的优势...
3. **视觉元素**:模板中的文字排版简洁大方,常用中国古典诗词或名言警句作为点缀,如《围炉夜话》的引用,既增添了文化底蕴,又可以作为主题的引申。 4. **专业定制服务**:强调提供最专业的PPT模板定制服务,...
3. 管理学原理:第三题引用了“一山难容二虎”的俗语,引申到组织管理问题。这涉及管理学中的领导力、团队协作和权力集中等概念。正确的理解是组织需要集中统一管理,避免权力分散导致的不和谐。 4. 社会事件影响...
5. 气象学与哲学题:“蝴蝶效应”是一个气象学概念,被用来阐述微小事件可能导致重大结果的原理,同时也引申出对事物因果关系的思考。 6. 公文写作题:涉及公文类型及其适用场景,这里提到了平行文和下行文的特性。 ...
"QuidProQuo"这一词汇源自拉丁语,意为“等价交换”,在这里我们可以将其引申为字体设计与视觉效果之间的相互作用。本文将深入探讨字体设计的基本原理、类型以及在不同场景中的应用,帮助你更好地理解和利用字体资源...
为了更清晰地表明这一环境问题,试卷中还引用了统计数据,如20世纪50年代重庆的平均雾日数,以及与其他城市如伦敦、东京的对比,显示重庆在雾天数量上的历史优势和当前的变化。 这份试卷的独到之处在于,它不仅仅...
其中涉及的试题类型可能包括语言理解、逻辑推理、人文知识、时事政治等多个方面,旨在测试考生的综合素质和专业知识。 1. 第一题是一个词语搭配的选择题,考察的是词汇的准确运用和语境理解。正确选项强调了“知者...
化学建材管试验报告.zip”这个标题和描述并未直接涉及到IT技术,但我们可以从中引申出与数据管理、文件压缩和电子表格处理相关的知识点,这些在日常工作和学习中都是至关重要的。 首先,我们要了解的是文件压缩。...
Linux 是在 1991 年发展起来的与 UNIX兼容的操作系统,可以免费使用,它的源代码 可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学...
**三、论证类型与方法** 1. **论证类型**: - **立论**:直接证明自己的观点。 - **驳论**:反驳他人的错误观点,以显示自己观点的正确性。 2. **论证方法**: - **例证法**:用具体事例来证明论点。 - **引证...
5. 复句结构:理解并列、递进、选择、转折、因果、条件和假设等复句类型。 6. 修辞手法:如比喻、比较、借代、夸张、对偶、排比、设问、反问、反复、比照、反语和引用,掌握它们的作用和运用场合。 **三、现代文...
首先,词汇读音是语文学习的基础,它涉及到对词语发音的准确性与规范性。在这个部分,学生需要掌握正确的读音,例如“深邃”应读作“shēn suì”,“踟蹰”应读作“chí chú”,“百舸争流”的“舸”应读作“gě”...