黑马程序员技术交流社区

标题: 只读字段与常量的区别 [打印本页]

作者: 芦路    时间: 2013-10-20 18:00
标题: 只读字段与常量的区别
本帖最后由 芦路 于 2013-10-20 18:25 编辑

如果字段设置为只读,它的值就不会改变,那么它与常量到底有没有区别呢?

作者: 荣右铭    时间: 2013-10-20 18:12
想像有一个变量,你想让它不能改变,可以有两种方法:
第一种是在内存中加一把锁,这样一旦要写入这个变量代表的内存,就引发一个异常,典型的如string字符串,这叫做“只读字段”
我们的程序本身储存在内存中,那块内存空间也是只读的
第二种是用一张表,记录下哪个变量是“不可变的”,在程序编译之前检查这张表,发现符合而又要求赋值,就报错
例如const变量,这叫做“常量”
两种方法的区别在于,一个是在程序运行时抛出异常,程序有可能就运行不了了,一个是在一切还没开始之前提醒程序员出了问题。
假设又一个50万行的程序,你在第5行定义了一个变量,而你在第40万行给这个变量赋了值,因为实在隔了太多行,你忘了这个变量是不应该改变值的,好了你把它定义成const,你在任何一个地方一给它赋值编译器就报错,这是不是很方便?这就是const变量的作用。
作者: aihuahuaxx    时间: 2013-10-20 19:01
常量和只读变量有以下区别:1.常量必须在声明时就被初始化,指定了值后就不能修改了.只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造以后值就不能修改.2.常量是静态的,而自读字段可以是静态和动态的3.Const可以用在字段和局部变量,readonly只可以修饰字段
作者: 龏鈊づ廱鵆ぐ    时间: 2013-10-20 19:03
常量就是一个数,如const  double PI=3.14。PI只是3.14的一个代号,方便你在程序中使,同时也增加了代码的可读性。如果你在用到的PI不是3.14那么好记而是3.1415926534588这么一大串数据,而你如果不把它声明为常量。在写代码时你就得多次的输入这串数字十分繁琐又容易出错,别人看代码时看到PI很容易理解是代表什么。但是看到公式中的一大串数据,那就要骂娘了呵呵
2.我不太了解只读变量是什么,是静态变量吗?按字面来看只读变量的值也和常量一样不允许改变。但是最大的区别是只读变量它是个变量,声明它时,需要给它分配内存空间或者说是缓冲。而常量不是变量,是一个静态的值,不需要为它分配内存空间。说白了在这个程序编译时就是把PI直接看成是3.1415926534588。如果是变量,就需要到内存去取值或者把值存入内存,只是编辑器内部需要做的事情
作者: 782385854    时间: 2013-10-20 19:19
常量定义:在编译时其值能够确定,并且程序运行过程中值不发生变化的量。定义常量类型有int,bool,char,double,sting等。
        语法: const 类型名 常量名=常量表达式;
例子: const string s=”some text”;
常量初始化:常量在定义时必须被初始化。
const int i=10;
        const int j=i+2;
变量的定义:具有变量名和值的对象。(某一段内存区域中的数据)
而你说的只读变量是自己定义的只读方式么,如果是这样为什么跟常量来比较呢,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2