readonly 和 const 的误区
来源:互联网 发布:mac怎么关闭键盘灯 编辑:程序博客网 时间:2024/05/21 15:41
readonly和const都用来定义只读变量,但是readonly属于动态常量,const属于静态常量:
<span style="color:#3366ff;">动态常量:在运行时获取常量的值,并赋值到每个引用的位置;静态常量:在编译时会把每个引用该常量的位置,全部替换成设定的值 -- 如果有c语言基础,一定可以理解这一点</span>
所以静态常量在定义的时候必须初始化,且不能再修改,因为项目一旦开始编译,静态常量的值就会被获取,并替换项目中所有引用该常量的位置;
但是动态变量是可以延时到构造函数再初始化(当然在定义的时候也可以直接初始化),且不能再修改。
上面简单做了描述,如果不能理解,那么我们通过一个例子来解释一下:
public class Test{ public static readonly int A=10; public const int B=20;}public class Runner{ public void Run(){ int num_a=Test.A; int num_b=Test.B; }}
如上代码,编译后:
class Test{ .field public static initonly int32 A; -- 并未赋值 .field public static literal int32 B=int32(0x00000014); -- 已经被赋值}
代码中出现Test.B的位置,会全部被替换成20,所以在运行的时候,性能会比较好;
代码中出现Test.A的位置,依然是Test.A,所以运行的时候,内存中需要记录Test.A的值,每当运行到Test.A调用时,就到内存中读取该值,所以性能次之;
经常出现的问题:
在一个项目A中,定义了一个静态常量 const SOMETHING=VALUE; 在另一个项目B中做了引用,但后期因各种需求,需要变更项目A中常量的值,并对项目A重新编译后部署,但此时并没有重新编译项目B,所以导致项目B运行时,仍然是过期的常量值。
了解它们的区别,才能更合理的使用它们:
readonly:有内存消耗;可以是任意类型(包括自定义的类型);可以在定义时或构造函数中初始化;
const:无内存消耗;只能是基元类型;只能在定义时初始化;
0 0
- readonly 和 const 的误区
- const,readonly和static readonly的区别
- const 和 readonly 的区别
- const 和 readonly 的区别
- readonly 和const的区别
- const 和 readonly 的区别
- readonly 和const的区别
- const 和 readonly 的区别
- const 和 readonly 的比较
- const和readonly的区别
- readonly 和const的区别
- const和readonly的值????
- const和readonly的区别
- const 和 readonly 的区别
- Const和ReadOnly的区别
- const 和 readonly 的区别
- ReadOnly和Const的区别
- const 和 readonly 的区别
- Exception in thread “main” java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
- Android toolbar与actionbar区别
- TCP连接的终止(四次挥手)图解
- GBDT(MART) 迭代决策树入门教程 | 简介 .
- 杂记<六>
- readonly 和 const 的误区
- 设计模式笔记-Observer模式
- Android Studio官方版DrawerLayout侧滑菜单解析
- 分页函数(Python)
- 专业很重要吗
- win7下QT5.6+OPENCV3.0+minGW32 的配置
- Jva实现银行系统的简写
- 如何创建一条可靠的实时数据流
- 查询方式的按键驱动程序