精华内容
下载资源
问答
  • 通过指针,可以轻松修改常量,如下代码 #include int main(){  const int i=100; int *p=&i; *p=200; printf("%d",i); } 这样 常量i的就已经改变了 volatile 从内存读取数据 如果是c++...

    通过指针,可以轻松修改常量的值,如下代码

    #include<stdio.h>


    int main(){

     const int i=100;

    int *p=&i;

    *p=200;

    printf("%d",i);

    }

    这样 常量i的值就已经被改变了

    volatile  从内存中读取数据  如果是c++的话要使用这个关键字定义常量才行 ,不然c++的编译器对常量做了优化,常量默认不从内存读取数据

    volatile const int i=100;

    展开全文
  • 修改一个常量类的静态常量值,然后把常量类的class文件上传到服务器后并没有生效,多次重启服务,最后查询了相关资料,使用GUI反编译工具反编译查看编译后源码,终于找到问题所在: 单纯的修改静态常量是没用的,...

    修改一个常量类中的静态常量值,然后把常量类的class文件上传到服务器后并没有生效,多次重启服务,最后查询了相关资料,使用GUI反编译工具反编译查看编译后源码,终于找到问题所在:

    单纯的修改静态常量是没用的,还要重新编译所有引用静态变量的类(或把这些类重新上传服务器),不然不会生效。

    这里就牵扯到Java虚拟机编译机制:在Java文件中,指向编译时static final的静态常量, 会在运行时被解析为一个局部的常量值(也就是说静态常量在编译后,成为了常量,而不是原先的代码)。这对所有的基础数据类型(如int ,float等)和java.lang.String都适用。

    请看下面一个实例:

    程序中使用的各种常量用一个类Contants.java来统一管理。

    public class Contants{
        public static final String STR = "csyor.com";
        //......
    }

    然后在某些逻辑代码段里使用了这些常量。这样做可以便于管理常量,避免了大量的magic number/text,在修改常量内容时只需改这一个类就行了。

    import Contant;
    public class SomeService {
        public void doSome() {
            // 这里应用了上一个类的静态常量Contants.STR
            System.out.println(Contants.STR);
        }
    }

    在上面的代码中,SomeService类使用了Contants.STR这个常量,表面上是通过Contants类取得的这个值,实际上在SomeService被编译后,其代码已经改变,如下:

    import Contant;
    public class SomeService {
        public void doSome() {
            // 这里把静态常量Contant.STR直接编译成为了一个常量"csyor.com"
            System.out.println("csyor.com");
        }
    }

    我们发现,这里面根本没有Contants类什么事,所以即使我们修改了Contants类中的常量,让STR = “www.csyor.com”,但是SomeService中依然会打印 “csyor.com” ,因为SomeService中的代码没有任何修改,在增量编译的情况下,它的class文件不会被重新编译。

    那么说到这里可能会有人问:那为什么你在本地调试的好用呢?

    主要是因为本地一般使用的IDE(集成开发环境)是可以自动编译的,而我们上传到服务器的时候一般只是上传自己更改过的java文件编译后的class文件(也就是包含静态常量的class),至于引用这个静态常量的其他类因为没有改动过所以不会上传,就出现了本地调试不会出现问题,但是在服务器上没有效果的情况。

    明白了上面这些,问题就已经解决了,注意:不管是更换什么class文件,一定需要重启中间件容器。

    解决方法一:单纯的修改静态变量STR是没用的,还要重新编译所有引用过静态变量STR的类(然后重新上传到服务器),不然不会生效,也就是说使用到这个常量的类都要重新编译。

    解决方法二:去掉final

    使用静态常量时一定要慎重,因为一旦修改它,就需要将整个项目中引用过该静态常量的地方重新编译替换。

    展开全文
  • Calendar常量值

    2018-07-28 12:30:19
    关于Calendar常量值 © 黄玉昆 黑马帝 / 2013-2-28 09:42 / 535 人查看 / 1 人回复 / 0 人收藏 保留作者信息 禁止商业使用(站长自定义文字) 不知道大家有没有过这样的问题,就是你获取...

    关于Calendar中的常量值

    © 黄玉昆 黑马帝   /  2013-2-28 09:42  /  535 人查看  /  1 人回复  /   0 人收藏 保留作者信息 禁止商业使用(站长自定义文字)

    不知道大家有没有过这样的问题,就是你在获取时间的时候,会少写get方法,而直接获取的是Calendar.DAY_OF_MONTH,结果发现不是自己想要的值,为什么呢?
    今天我翻阅了api文档,查看了一下关于Calendar中的DAY_OF_MONTH字段数字,没错,它被称为get 和 set 的字段数字,而且你细心一点就会发现,它是这样被定义的:
    public static final int DAY_OF_MONTH你会不会有些疑问呢?这些字段数字都是静态的常量值,那为什么还能对其修改呢?还可以使用add,set等方法对其设置呢?
    我对这个问题开始也很迷惑,百度了之后,才大概有些明白,我的理解是这样的:
    你可以把这个Calendar中的YEAR的常量值理解为它的小名,打个比方说,一个人大名叫张三,你可以叫他的小名为小张,这个张三就相当于YEAR,而这个小张就是YEAR的常量值,为什么要这么设置呢?
    这就要和字段值相联系了。其实,这些设置的操作是对具体的时间的修改,而不是对这些字段值的修改,获取的也是修改后的时间值。之所以称之为字段值,就是应为方便设置:简单地说就是将日期分为几段,如图所示:
    YEAR   MONTH   DAY_OF_MONTH  ...
      1          2                   5   ...
    (相应的字段值请看Calendar的常量值)
    那么要是对某一部分进行修改的话,如设置年份为2013年,则为set(1,2013)
    1. set(int code,int value){
    2. switch(code){
    3. case 1:
    4.   修改年代
    5. }
    6. }
    复制代码其中的code就相当于字段值,而value就是所要设置的时间值,那么字段值是常量就不会改变的。而是将字段值(键)这个常量所对应的要修改的时间值(值)进行修改。所以并没有改变这个常量,为何还要写成YEAR这样的单词呢,而不是用1表示呢?当然,这就是静态常量的好处了,设为静态static就是为了加载Calendar这个类的时候就存在了,直接可以用了;而设为常量final就是为了方便识别,用起来方便,名字好记,而不用记那么多数字。(其实就可以理解为相应的数字代表相应的时间名称)。
    说到这里,不知道大家明白了没有。简单地说,就是你修改的是Calenda中某个字段值的属性,改变的是它的状态,而不是它的时间这个名字。如,不是将YEAR的字段值1改变为2013,而是将这个字段值为1的YEAR所对应的时间值2012年改为2013这个数值。一个是数字(字段值),一个是数值(时间值或称为时间信息)。
    展开全文
  • 这个问题的前提不明 ...符号常量是一个常量,是不变量,所以,编译的时候,就把符号常量出现的地方,替换为符号常量对应的常量。符号常量一般用户定义一个全局使用的数据,而且要改变该数据的时候...

    这个问题的前提不明
    但是大概意思应该是为什么不用整数常量来直接表示某个数字而使用符号常量预定义

    整数常量:

    int c = 3
    

    符号常量:

    #define number 3
    int c = number
    

    这两个代码的优缺点区别

    解释

    符号常量是一个常量,是不变量,所以,在编译的时候,就把符号常量出现的地方,替换为符号常量对应的常量。符号常量一般用户定义一个全局使用的数据,而且要改变该数据的时候,只需要改变符号常量的值,代码中引用符号常量的地方,都会把值相应修改过来。
    就如在C语言的例子:
    #define I_love_you 521
    这条语句说明会在之后的编译中将l_love_you 自动替换成521,而整数常量需要在代码中全部修改一遍,一旦需要修改非常麻烦

    展开全文
  • 最近学了一点点汇编,突然想到能不能通过内嵌汇编修改C++const常量。G++编译器下 由于汇编只懂皮毛,不知道如何知道i的地址,于是用蠢办法输出它的地址 - -! 发现并没有改变,于是网上搜到了一篇文章,...
  • SpringBoot获取配置文件常量值

    千次阅读 2019-12-21 14:02:23
    我们你的日常开发,经常会有一些常量,变动较少,但是我们不能java代码中写死,这样每次修改都得去java代码中修改,引用地方较多时我们需要修改很多java文件;我们可以集中写某个配置文件,这样只用修改...
  • 如何修改一个字符串常量

    千次阅读 2018-11-25 02:50:31
    关于程序内存布局的问题面试经常会...首先我尝试了使用VirtualProtect更改Windows下的字符串常量值的读写权限,很成功的更改了其值,但是对Linux进行处理时则不然,使用先是mprotect失败,原因为EINVAL,查...
  • ES6之- const常量是否真的不能被修改?

    千次阅读 2020-05-21 15:41:54
    从上述几段代码可以看出,当const定义的常量为 '基础数据类型' 时,不能被修改;当定义的常量为 '引用数据类型' 时,我们可以通过其属性进行数据修改 为何会如此呢? 因为const常量保证不能改变,其实保证的是...
  • Java常量与静态常量能不能修改值

    千次阅读 2019-09-04 09:55:29
    直接上代码 import java.util.*; // 2019/9/4 public class ConstVarDemo { private final int v1 = 1; private static final int v2 = 2; private final List<Integer> list1 = new LinkedList<>...
  • 编译器是从来不考虑这个常量从地址被修改的情况的,即一开始定义后,就不会重新从地址取值。 【实现过程】 本实例以整型常量为例,定义整型指针point及整型数据changliang(由const定义的常量)。将point指向...
  • 变量和常量(详解与代码

    千次阅读 2019-04-23 17:35:41
    4、常量 变量的本质上就是代表一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的。 1、局部变量 局部变量...
  • 如何规范代码中常量写法

    千次阅读 2017-08-22 15:25:21
    (2)传感器的参数配置,比如agv,一些场合需要修改检测距离,否则就越不过障碍,这时候适当降低了安全性,但也没有办法; (3)兼容不同的外部设备,比如不同的控制器,不同总线的继电器组等; (4)页面的访问...
  • 一直想String类的实体是一个常量,为什么却可以对它进行修改呢 例如代码: public class Test { public static void main(String[] args) { String str="aaa"; str+="bbb"; System.out.println(str); }...
  • 处报错,假设常量不能修改值这种说法是正确的,那代码中只是给AGE的并没有改变还是12,就不应该报错,但是报错了,因此常量不能修改值这种说法是错误的,只能说常量不能够二次赋值,二者的意思是不一样的 ...
  • 今天回顾C++的const_cast的时候无意写了这样一段代码: #include using namespace std; int main(){ const int i=100; int *p=const_cast(&i); (*p)++; cout; cout*p; } 运行结果如下: 0x22f
  • 为什么要把0和""定义成一个常量呢?这是没有正确理解到底什么是魔鬼数字和硬编码...如果定义的常量没有达到这4个要求的任意一个,那么可以说这个常量的使用是没有意义的,会导致另一中代码坏味道:没有必要的复杂性。
  • 常量就像是常规的变量,只不过常量值在定义后不能进行修改。 #include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using ...
  • Java 常量可以定义哪里?

    千次阅读 2019-03-04 16:12:44
    哈哈,很搞笑的问题吧!可是小编实际开发还真的遇到了一个相关的麻烦,敦促我把这个知识点梳理一下。大神可以飘过,小白还真是要了解一下...不过我觉得提取出来并不会有利于代码性能提升,因为常量分配内存的...
  • 一、常量:不会变化的数据,不能被修改 1.举例: 比如 “hello” 为字符串常量、‘A’ 为字符常量 、-10 为整型常量、3.1415926 为浮点常量; 2. 宏定义 : #define PI 3.1415 这样定义出来的 PI 也是常量,数值为...
  • /* 常量就是常量编译期就必须确定其,不应该运行期更改,否则程序的可读性会非常差 */ public class proposal_2 { interface Const{ public static final int RAND_CONST=new Random().nextInt(); ...
  • 大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请...但是在旧版的Swift对于Objc常量枚举会提示找不到,你可以在这个讨论帖子了解到详情:https://github.
  • javascript常量

    千次阅读 2019-08-25 08:57:25
    js一旦定义就无法再被修改的变量,称之为常量 常量:不能修改 常量的关键字是const 常量只能读取,不能修改 常量通常用大写字母定义,多个单词之间用下划线_分隔 */ //重力加速度 var G = ...
  • 静态代码可以其之后出现的静态常量进行复制 比如底下这个例子,开始确实挺难理解的,觉得是肯定是static int m=100; 先执行,因为上面的静态代码块里m未定义类型,所以我特意将底下的定义类型给注释掉看结果 ...
  • 有些时候,在代码中定义常量,不便于更改。所以这里写一点个人窍门。原本是这样的: String nodeUrl ="123"; String pkiId = "456"; String senderId = "789"; String serviceId = ...
  • 问题解决:static final修饰的静态常量,其引用的地方编译后,会写死class文件里,修改静态常量,其引用的代码文件若没有重新编译,是不会改变的。本地测试成功,是因为本地项目开发工具里是全部...
  • 开发,经常会有一些常量,变动较少,但是我们不能java代码中写死,这样每次修改都得去java代码中修改,引用地方较多时我们需要修改很多java文件;所以我们可以集中写某个配置文件,这样只用修改配置文件就好...
  • 常量

    2016-10-02 10:33:07
    常量就像是常规的变量,只不过常量值在定义后不能进行修改
  • 程序使用常量的好处

    千次阅读 2013-11-26 19:23:09
    如果以后销售税率发生变化,把新赋给这个常量,就可以修改所有的税款计算结果,而不必查找整个程序,修改税率为0.06的每个项。 3、常量更容易避免程序出现错误。如果把一个赋给程序的一个常量,而该常量已经...
  • PHP中常量

    2017-07-03 10:40:45
    1.php定义常量是用define()函数,如下代码: define()函数不能用于类内部。 define(常量名,,[是否区分大小写]);true是不区分大小写,false区分大小写。默认情况下常量名是区分大小写的,也就说默认false。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 299,875
精华内容 119,950
关键字:

常量的值可以在代码中被修改