`
kk3173603
  • 浏览: 7958 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

基础类型与引用类型引申

阅读更多

 

.基本类型与引用类型的值

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

        JAVA中的基础类型有int,char,byte,long,short,boolean,特别注意String不是基础数据类型,但在javascriptECMAScript放弃这一传统,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
0
0
分享到:
评论

相关推荐

    初级软件开发工程师考试大纲.docx

    * 懂得(II):能将所学知识加以解释、归纳,能领会某一概念或者原理与其它概念或者原理之间的联系,懂得其引申意义,并能做出正确的表述与解释。 * 应用(III):通常能用所学的概念、原理、方法正确分析与解决较简单的...

    java基础练习题,无答案,基础。

    6. **参数传递**:基本数据类型作为参数时,是值传递,而对象作为参数时,是引用传递,因此可以通过对象参数改变实参的值,选项B正确。 7. **继承关系**:在Java中,一个子类只能有一个父类,但一个父类可以有多个...

    c++教学大纲

    - **后续发展**: 本课程将重点讲解C++语言的基础内容,并引申到面向对象的程序设计。 #### 三、课程教学内容 - **总学时**: 72小时(理论42小时+上机30小时)。 - **第一章: C++的初步知识** - **从C到C++**: 发展...

    传智播客扫地僧视频讲义源码

    09_数据类型引申和思考 10_变量本质剖析和内存四区模型引出_传智扫地僧 11_c的学习重理解到位_对初学者_传智扫地僧 12_直接通过内存标号操作内存空间_课堂答疑 13_中午课程回顾 14_内存四区基本原理_全局区案例理解 ...

    1810-北京市-训诂学.docx

    【综合题】训释性质的三种类型包括:直训、引申、比喻等,它们之间相互联系,共同帮助理解古文的深层含义。例如,直训直接解释词的本义,引申通过词语的演变来扩展意义,比喻则借助类比来阐释难以言表的概念。 ...

    山东诗营市第一中学2016届高三语文上学期期中试题

    9. 家国一体观念:强调家庭与国家的关系,反映出中国传统社会的政治结构特点,即家是国的基础,国是家的延伸。 10. 宗教伦理与政治:家长制的论述揭示了伦理道德如何在封建社会中作为政治统治的手段。 综上所述,...

    教师资格证写作素材.doc

    1. **符合试题规定的文体要求**:考试题目可能会指定特定的文体类型(如记叙文、议论文等),考生需要严格按照要求进行写作。 2. **符合考生已设定的文体要求**:当题目允许“文体自选”时,考生可以根据自己的优势...

    中国风ppt模板图片下载.ppt

    3. **视觉元素**:模板中的文字排版简洁大方,常用中国古典诗词或名言警句作为点缀,如《围炉夜话》的引用,既增添了文化底蕴,又可以作为主题的引申。 4. **专业定制服务**:强调提供最专业的PPT模板定制服务,...

    兴隆台2016年事业编招聘考试真题及答案解析版.docx

    3. 管理学原理:第三题引用了“一山难容二虎”的俗语,引申到组织管理问题。这涉及管理学中的领导力、团队协作和权力集中等概念。正确的理解是组织需要集中统一管理,避免权力分散导致的不和谐。 4. 社会事件影响...

    嵊州事业编招聘2018年考试真题及答案解析版(1).docx

    5. 气象学与哲学题:“蝴蝶效应”是一个气象学概念,被用来阐述微小事件可能导致重大结果的原理,同时也引申出对事物因果关系的思考。 6. 公文写作题:涉及公文类型及其适用场景,这里提到了平行文和下行文的特性。 ...

    QuidProQuo

    "QuidProQuo"这一词汇源自拉丁语,意为“等价交换”,在这里我们可以将其引申为字体设计与视觉效果之间的相互作用。本文将深入探讨字体设计的基本原理、类型以及在不同场景中的应用,帮助你更好地理解和利用字体资源...

    南京事业编招聘2016年考试真题及答案解析打印版(1).docx

    其中涉及的试题类型可能包括语言理解、逻辑推理、人文知识、时事政治等多个方面,旨在测试考生的综合素质和专业知识。 1. 第一题是一个词语搭配的选择题,考察的是词汇的准确运用和语境理解。正确选项强调了“知者...

    参考资料-472.化学建材管试验报告.zip

    化学建材管试验报告.zip”这个标题和描述并未直接涉及到IT技术,但我们可以从中引申出与数据管理、文件压缩和电子表格处理相关的知识点,这些在日常工作和学习中都是至关重要的。 首先,我们要了解的是文件压缩。...

    高中议论文写作指导教案.doc

    **三、论证类型与方法** 1. **论证类型**: - **立论**:直接证明自己的观点。 - **驳论**:反驳他人的错误观点,以显示自己观点的正确性。 2. **论证方法**: - **例证法**:用具体事例来证明论点。 - **引证...

    高中语文必须掌握的基本知识.doc

    5. 复句结构:理解并列、递进、选择、转折、因果、条件和假设等复句类型。 6. 修辞手法:如比喻、比较、借代、夸张、对偶、排比、设问、反问、反复、比照、反语和引用,掌握它们的作用和运用场合。 **三、现代文...

    2018版高三语文二轮复习第四部分写作第五节任务驱动型作文写作讲义.pdf

    5. 合理引申:在论述中适度拓展,将任务与相关话题联系起来,增加文章的广度和深度。 6. 归结全文:结尾处总结全文,强化任务成果,可以深化认识,表达对未来展望,或提出解决建议。 例如,给定的文题展示了一个...

    小学生国旗下的讲话25篇.docx

    - **珍惜时间**:青少年应该认识到时间的宝贵,充分利用这段时间为自己打下坚实的基础。 - **长远规划**:从小培养良好的习惯,对未来的职业生涯和个人成长都将产生深远的影响。 综上所述,这些讲话稿通过不同的...

    湖南省双牌县2020届九年级语文上学期第一次月考试题(无答案).doc

    1. **基础知识及运用**:这部分主要考察学生对汉字拼音的掌握,如"饶恕"、"阴霾"等词的正确发音,这需要学生扎实的语文基础和词汇积累。 2. **错别字辨析**:此题检验学生对汉字书写规范的了解,要求找出含有两个错...

    Linux操作系统基础教程

    Linux 是在 1991 年发展起来的与 UNIX兼容的操作系统,可以免费使用,它的源代码 可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学...

Global site tag (gtag.js) - Google Analytics