精华内容
下载资源
问答
  • C/C++修改常量

    千次阅读 2011-03-25 11:36:00
    C/C++中常量修饰const可以用来保证一些确定的量不会一不小心改变,比如PI,一直是3.14159......但是不排除有时候也会需要修改常量,通过直接修改是不能达到目的。比如:#include int main(int argc, const ...

    C/C++中常量修饰const可以用来保证一些确定的量不会被一不小心改变,比如PI,一直是3.14159......

     

    但是不排除有时候也会需要修改常量的值,通过直接修改是不能达到目的。

    比如:

     

    编译时会报错:

     

    const1.c: In function 'main':

    const1.c:5: error: assignment of read-only variable 'a'

    但是,我们可以通过&找到常量a所在的地址进行修改:
     
    当然也可以用asm的方法,效果一样, x86下是这样用的:
     
    运行结果:
    a = 1
    a = 2
    从结论可以猜测,gcc只是在编译时检查对常量的操作并保证不被修改,但是不能保证通过地址或其他手段修改。

     

    展开全文
  • final double PI= 3.14; //初始化PI是3.14,不能再次赋值,如下: PI=100; //程序会报错,因为用final初始化不能改变。 一般来说用到final字符常量须全部大写
    final double PI= 3.14;
    //初始化PI是3.14后,不能再次赋值,如下:
    PI=100;
    //程序会报错,因为用final初始化后不能改变。
    

    一般来说用到final后字符常量须全部大写

    展开全文
  • 产品包中有一个product.jar,出升级补丁时,只修改了该jar包中的一个类中的一个静态常量。 [code="java"] public class AppConstant { public static final String APP_NAME = "MyProduct"...
    最近在对一个产品出升级补丁时遇到一个问题,与静态常量有关。

    [b]问题现象:[/b]
    产品包中有一个product.jar,出升级补丁时,只修改了该jar包中的一个类中的一个静态常量。


    public class AppConstant {
    public static final String APP_NAME = "MyProduct";
    }

    改为

    public class AppConstant {
    public static final String APP_NAME = "MyProduct2";
    }


    将新的AppConstant.class添加到product.jar中后,发现没有实现预期的功能。
    然后尝试重新生成完整的product.jar,添加到产品包中,新功能生效。

    [b]问题原因:[/b]
    开始怀疑是编译环境jdk版本不一致导致的,于是尝试使用相同jdk编译,问题依旧。
    后来怀疑是静态常量导致的问题,更新静态常量时,要同时更新引用该静态常量的类,并确保该类已经重新编译。因为静态常量被引用时,在编译期就已经确定了值,在运行期不会动态加载对应的值。


    [b]参考资料:[/b]
    [url]http://blog.csdn.net/ahhsxy/article/details/6097881[/url]
    展开全文
  • 这提高了Java应用的速度,但是假如你修改并且重新编译了原始的类,而没有重新编译使用它的类,那么新的就没有拷贝过去。 例如,对于两个类ClassA和ClassB: public class ClassA { static public final...

    一、第一篇转载的文章


    当编译final变量时,java编译器通过直接将他们拷贝到使用它们的类中的方式作了优化。这提高了Java应用的速度,但是假如你修改并且重新编译了原始的类,而没有重新编译使用它的类,那么新的值就没有被拷贝过去。


    例如,对于两个类ClassA和ClassB:

    public class ClassA {

    static public final int PORT = 80;

    }

    public class ClassB {

    public ClassB() {

    download(ClassA.PORT);

    }

    PRivate void download(int port) {

    ....

    }}

    ClassB中的第4行将象下面这样编译:

    download(80);

    当ClassA中的第3行变成了下面这样:

    static public final int PORT = 8080;

    ClassB会仍然保持了于原来相同的值。你必须也重新编译ClassB,以便那一行更新为下面这样:

    download(8080);

    移除final要害字是可能的,但是在许多时候经常会优先考虑速度的提高。确保所有的类都被编译过。假如你使用了一个build工具,例如ant,当代码还处于开始的不稳定阶段时,要使用ant clean和rebuild。



    二、另一篇转载的文章


    在某些逻辑代码段里使用了这些常量。这样做可以便于管理常量,避免了大量的magic number/text,在修改常量内容时只需改这一个类就行了,但有时候会奇怪地发现,重新编译打包的程序依旧我行我素,并没有即时反应我们对常量的修改,这是何解呢?

    主要针对的是处理全局性常量的情况

    public class AppConst {

    public static final String STR_CONST_1 = "String1";

    public static final String STR_CONST_2 = "String2";

    ......

    }定义了一个常量类里面定义了我们需要用到的常量值!

    然后在某些逻辑代码段里使用了这些常量。这样做可以便于管理常量,避免了大量的magic number/text,在修改常量内容时只需改这一个类就行了,但有时候会奇怪地发现,重新编译打包的程序依旧我行我素,并没有即时反应我们对常量的修改,这是何解呢?

    在之前的《JVM学习笔记三--类的初始化》中我曾提到,静态常量(即用 static final 修饰的变量)是编译时常量,当一个class文件编译完毕,它内部使用到的所有常量的具体值就已经确定了,不能想当然地以为它在运行时并连接常量管理类之后才会以引用方式使用常量。比如下面这段代码:

    import AppConst;

    public class SomeService {

    public void serviceJob1 {

    System.out.println(AppConst.STR_CONST_1);

    }}类SomeService使用了STR_CONST_1这个常量,表面上是通过AppConst类取得的这个值,实际上在SomeService被编译后,其代码其实变成了

    public class SomeService {

    public void serviceJob1 {

    System.out.println("String1");

    }}这里面根本没有AppConst什么事,所以你即使修改了AppConst的相关常量,令STR_CONST_1 = "NotString1",SomeService可能依然会打印"String1",因为SomeService的代码没有任何修改,在增量编译的情况下,它的class文件不会被重新编译。

    明白了上面这些,大致就知道怎么办了,我的方法有两个:

    1. 原始条件下,删除class文件后手动重编译。

    2. 使用IDE的时候, 先对SomeService做一个细微修改并保存(会自动编译),然后再修改回来并保存(再次自动编译)。如此class文件就会被更新了。

    说明:这就是为什么要把全部的.class文件删除掉了。

    补充:

    改成

    1. public class AppConst {

    2.

    3.

    public static getString2{

    return "String2";

    }4. ......

    5. }

    就可以仅仅修改并编译一个类就行了

    从根本上来解决此问题得这么做,最简单。

    public class AppConst {

    public static final String STR_CONST_1 = new String("String1");

    public static final String STR_CONST_2 = new String("String2");

    public static final int number1=new Integer(123);

    ......

    }反编译,你会发现在引用此静态类属性的时候,引用代码不是直接用具体值替代,而还是源代码里的引用。

    一句话总结,在静态类里定义的静态属性,坚决不用引用类型,而需要用对象类型。

    结论:

    解决这种问题总共有三种方法:

    1、将全部的CLASS文件删除掉再编译

    2、将其变成GET、SET方法

    3、设置成对象引用的方式处理!


    展开全文
  • ArcGIS将栅格数据某一范围设置为一常量值 GIS思维 今天我们做一个小小的技术答疑。问题的起源来源一学员的提问。问题表述如下(原文): “老师您好!我这有个区域的DEM数据,因对其中的部分区域拟平...
  • 关于c++报错:“表达式必须含有常量值” 的原因和解决办法 在用vs2019运行一段代码时显示这样的错误: 原因及解决办法: 因为[ndiffficulty+1]不是一个常数,需要运行时才能确定分配内存的大小。 最新的C++标准是...
  • string类修改字符串常量

    千次阅读 2013-08-08 11:09:43
    在看C++的string类型的时候,突然发现string类型可以对其字符串常量中的字符进行修改,而我记得字符串常量存储在常量存储qu
  • 常量指针 指针常量

    2017-12-13 18:50:10
    一级指针可以改变它所指向的变量的 二级指针可以改变一级指针的,即一级指针的指向. ... *const p,表示指针是一个常量,其本身不可修改,但是指向的 可以修改 指针常量常量指针
  • c++中不允许使用变量作为数组的长度定义数组,必须为常量值,c++中所有的内存需求都是在程序执行前通过定义的常量来确定的。 但是 我们有时候需要在程序运行时才能确定内存需求的变量值,例如所需值是由用户输入的...
  • 非常量引用的初始必须为左值,常量引用的初始可以为左值、右值
  • golang之常量

    2019-07-24 16:40:00
    1、 常量可以是全局常量,也可以是函数内部的局部常量。常量的值不可修改,常量表达式的值在编译期计算,...const 常量1 = 常量值/常量表达式 const 常量2 = 常量值/常量表达式 const pi = 3.1...
  • golang 常量简介

    2020-08-01 20:37:57
    目录 1.单个常量声明 2.多个常量声明 ...const 常量1 = 常量值/常量表达式 const 常量2 = 常量值/常量表达式 const pi = 3.14159 2.多个常量声明 和变量声明一样,可以批量声...
  • C++ 变量、常量、符号常量

    千次阅读 2018-12-08 15:13:52
    变量: int i = 0; // i 是变量 ...变量的可以修改,是可变的,但在某个确定的时刻,变量的确定的,并一直保持到下次被修改之前。    常量: int a=10; //a 是变量, 10 是常量...
  • C++ 符号常量

    千次阅读 2017-04-25 15:40:48
    使用const关键字来创建符号常量常量被创建就固定了,编译器将不允许修改常量。 const int a = 20;注意,应在声明时对const进行初始化,如果在声明常量时没有提供,则该常量将是不确定的,且...
  • 在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。 数组也可以用字符串常量进行初始化:  Char a[]=”abcdefg”;  与指针相反,由字符串常量初始化的数组是可以修改的。其中的单个...
  • 常量指针和指针常量

    2016-11-08 23:04:41
    指针常量常量指针的却别
  • Kotlin - 常量与变量

    2021-01-30 22:05:05
    Kotlin 中的常量使用 val 修改,一旦定义值后"不可再修改",常量类型分 2 种: 运行时常量(val):编译期不能确定它的,代码中会保留变量对它的引用。 编译期常量(const val):编译期就知道,并且会把代码中所有...
  • 常量

    2013-10-01 13:50:28
    常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量...
  • 符号常量

    2016-06-21 17:23:55
    其中#define 也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用...
  • 在之前在看jvm虚拟机的书,结果看到常量池的时候,看得一脸懵逼,去网上查也是云里雾里.所以这里自己花几天摸清楚...jdk1.7intern方法将字符串放到常量池,到底是在堆中创建对象,然后放的堆中的对象的引用,还是在直接...
  • String之常量

    2020-09-05 17:50:54
    String中的一旦确定则不可修改,不可修改指的是内存中的不能修改而不是变量的不能修改。 String常量池 使用双引号创建的字符称为String常量,也就是字符常量。 1、字符常量被存放在内存的常量池中 2、...
  • –如果是对象实例,不能修改其指针(但是可以修改对象内部的) 常量 常量:一种不会修改的变量 – java没有constant关键字 – 不能修改,final – 不会修改/只读/只要一份 static – 方便访问public java中的常量...
  • 1、指针常量 如果在定义指针变量时候...修饰符const与指针变量紧邻,说明指针变量不允许修改,既然指针变量的不能修改,所以一定要在定义的时候给定初值(指向一个确定存在的地方) 如下 <span style=...
  • 因为常量在编译期就确定,从而可以防止程序在运行过程中意外修改,而变量随着程序运行可能在变化。 常量关键字是const,变量是使用var定义 常量定义完可以不用使用,变量声明完必须至少使用一次 go语言中常量...
  • 标题有点绕,意思是说...即在编译期即可确定常量值。直接说重点,JVM这个编译优化会引起令人匪夷所思的BUG。让你查也查不到。 还是要回到标题,不加载A类就能直接引用A类的常量。这个常量会存在调用类的常量池中...
  • 字面常量

    2020-06-17 20:41:39
    一、常量包括字面常量,符号常量,契约型常量,枚举常量这几种类型。 字面常量包括:整形常量,字符型常量,字符串常量。注意:不存在数组常量,结构体常量等结构型的字面常量。但是存在结构型的符号常量。 字面...
  • 1.指针常量(* const),即指针是常量,指针(即地址)确认后不可更改,但可通过解引用改变该地址中的。 int A = 10, B; int *const a = &A; // 需先赋值 *a = A; // 正确 *a = B; // 正确 a = &B; // ...
  • 编译期常量与运行时常量

    千次阅读 多人点赞 2018-10-30 20:33:30
    常量大家都不陌生,但如果你一听到这个词,脑袋里就只能想得起来”常量不可修改“的话,那你就得好好往下读一读了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,902
精华内容 60,360
关键字:

常量名的值确定后什么被修改值