A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 芦路 中级黑马   /  2013-10-20 18:00  /  1451 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 芦路 于 2013-10-20 18:25 编辑

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

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

4 个回复

倒序浏览
想像有一个变量,你想让它不能改变,可以有两种方法:
第一种是在内存中加一把锁,这样一旦要写入这个变量代表的内存,就引发一个异常,典型的如string字符串,这叫做“只读字段”
我们的程序本身储存在内存中,那块内存空间也是只读的
第二种是用一张表,记录下哪个变量是“不可变的”,在程序编译之前检查这张表,发现符合而又要求赋值,就报错
例如const变量,这叫做“常量”
两种方法的区别在于,一个是在程序运行时抛出异常,程序有可能就运行不了了,一个是在一切还没开始之前提醒程序员出了问题。
假设又一个50万行的程序,你在第5行定义了一个变量,而你在第40万行给这个变量赋了值,因为实在隔了太多行,你忘了这个变量是不应该改变值的,好了你把它定义成const,你在任何一个地方一给它赋值编译器就报错,这是不是很方便?这就是const变量的作用。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
常量和只读变量有以下区别:1.常量必须在声明时就被初始化,指定了值后就不能修改了.只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造以后值就不能修改.2.常量是静态的,而自读字段可以是静态和动态的3.Const可以用在字段和局部变量,readonly只可以修饰字段
回复 使用道具 举报
常量就是一个数,如const  double PI=3.14。PI只是3.14的一个代号,方便你在程序中使,同时也增加了代码的可读性。如果你在用到的PI不是3.14那么好记而是3.1415926534588这么一大串数据,而你如果不把它声明为常量。在写代码时你就得多次的输入这串数字十分繁琐又容易出错,别人看代码时看到PI很容易理解是代表什么。但是看到公式中的一大串数据,那就要骂娘了呵呵
2.我不太了解只读变量是什么,是静态变量吗?按字面来看只读变量的值也和常量一样不允许改变。但是最大的区别是只读变量它是个变量,声明它时,需要给它分配内存空间或者说是缓冲。而常量不是变量,是一个静态的值,不需要为它分配内存空间。说白了在这个程序编译时就是把PI直接看成是3.1415926534588。如果是变量,就需要到内存去取值或者把值存入内存,只是编辑器内部需要做的事情

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
常量定义:在编译时其值能够确定,并且程序运行过程中值不发生变化的量。定义常量类型有int,bool,char,double,sting等。
        语法: const 类型名 常量名=常量表达式;
例子: const string s=”some text”;
常量初始化:常量在定义时必须被初始化。
const int i=10;
        const int j=i+2;
变量的定义:具有变量名和值的对象。(某一段内存区域中的数据)
而你说的只读变量是自己定义的只读方式么,如果是这样为什么跟常量来比较呢,

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马