zoukankan      html  css  js  c++  java
  • 值类型和引用类型 装箱和拆箱 类和结构的异同 接口抽象类异同

    1、栈和堆内存分配区分:
    内存内部的组织情况:分为栈区、堆区、全局区(静态区)static、文字常量区、程序代码区。
    a、由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.
    b、一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收.类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放.
    c、全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。
    d、常量字符串就是放在这里的。 程序结束后由系统释放。
    e、存放函数体的二进制代码。
     
     
    栈在内存分配上是连续的。堆(链表)是分散的。在栈上所申请的内存空间,当我们出了变量所在的作用域后,系统会自动我们回收这些空间,而在堆上申请的空间,当出了相应的作用域以后,我们需要显式 的调用delete来释放所申请的内存空间,如果我们不及时得对这些空间进行释放,那么内存中的内存碎片就越来越多,从而我们的实际内存空间也就会变的越 来越少,即,孤立的内存块越来越多.所以在使用完动态分配的内存(通过NEW申请)后,一定要显式的对它进行DELETE删除.对于这一点,一定 要切记...
    2、A。值类型。值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。值类型超出作用范围系统自动释放内存。
    主要由两类组成:结构,枚举(enum),结构分为以下几类:整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong)
    浮点型(Float、Double)
    decimal
    bool
    用户定义的结构(struct)
    B。引用类型。引用类型在堆中分配内存,初始化时默认为null。
    引用类型是通过垃圾回收机制进行回收。
    包括类、接口、委托、数组以及内置引用类型object与string。
     
    装箱:是从值类型转换成引用类型 :  int i=32;ohject o=i;  -->装箱操作
    拆箱:引用类型转换值类型: object o=23,int i=(int)o;
     
    3、结构包括:整型、浮点型、decimal、 bool、 用户定义的结构————》》是值类型。——》在栈中——》可以实现接口和继承,可以作为基类型
         类:引用类型——在堆中,只可以实现接口
     
    4、接口抽象类异同:
    概念不同:接口是对动作的抽象,抽象类是对对象的抽象,对象包括属性动作
    所以:接口可以被多重继承,你可以拥有多个动作,而抽象类只能被继承,因为你爸只能是你爸。如果把抽烟喝酒等一些列动作作为接口,那么作为儿子的你就可以实现这些接口,完全可以抽烟喝酒!
    再一点:接口中所有的方法都是抽象的,而抽象类不必
    还一点: 接口定义方法,不能实现,而抽象类可以实现部分方法。
    最后: 接口中基本数据类型为static 而抽类象不是的。

       

  • 相关阅读:
    Ant in Action读书笔记(一):Ant里的Property是immutable的
    Maven内置变量
    Ant in Action读书笔记(四):如何在Ant里对numberic的property进行比较?
    Ant in Action读书笔记(三):在Ant中导入环境变量
    Ant in Action读书笔记(五):如何在Ant里运行Groovy脚本
    查看oracle文件情况
    使用sc创建和删除服务
    c# 控制台程序输入输出流重定向
    查看某端口的占用情况
    mysql修改root密码
  • 原文地址:https://www.cnblogs.com/marryZheng/p/5330102.html
Copyright © 2011-2022 走看看