精华内容
下载资源
问答
  • 完美解析java常量和变量之间的区别

    千次阅读 2017-08-13 14:19:19
    常量代表程序运行过程中不能改变值。 语法格式 [访问修饰符]final 数据类型 常量名称 = 值;关键字final不可缺,常量名称要求必须大写。其中中括号内容是可选项, 特点 1.有关键字final 2.在...

     

     

    1、常量

    定义 常量代表程序运行过程中不能改变的值。
    语法格式 [访问修饰符] final 数据类型 常量名称 = 值;关键字final不可缺,常量名称要求必须大写。其中中括号内容是可选项,
    特点

    1.有关键字final

    2.在Java编码规范中,要求常量名必须大写

    3.必须声明,后使用。可以在声明时赋值,也可以在使用前任何时间赋值,但只能赋值一次。

    注意:全局常量可以不手动赋值,系统会初始化这些全局常量的值。局部常量必须赋值,否则使用时编译错误

    作用

    1.代表常数(也称常用的值),在项目开发实践中,会把这些常用到的值抽取出来放到一个类中方便其他类中调用这些常量,这样既可以防止疏忽出错,还便于以后维护代码,也就是说只要修改个地方就可以了。

    2.增强程序的可读性。使用一些有意义的名称代替一些值。例如 DOWN一看就知道这个常数是代表向下的意思。
    例子

    final double PI = 3.14;public final double PI = 3.14;在Java语法中,常量也可以首先声明,然后再进行赋值,但是只能赋值一次,final int UP;UP = 1;

             

     

    2、变量

     

     

    定义 变量是程序运行中,其值可以改变量
    语法格式 [访问修饰符] 数据类型 变量名[=初始值];中括号内容是可选项
    特点

    1.在Java编码规范中,要求量名必须小写

    2.必须声明,后使用。可以在声明时赋值,也可以在使用前任何时间赋值。可以赋值无限次。

    注意:全局变量可以不手动赋值,系统会初始化这些全局变量的值。局部变量必须赋值,否则使用时编译错误

    作用 变量代表程序的状态。程序通过改变变量的值来改变整个程序的状态,或者说得更大一些,也就是实现程序的功能逻辑。
    例子

    int x = 10;

    int x ;x=10;

           

     

     

    详情地址:http://yayihouse.com/yayishuwu/chapter/945

     

    展开全文
  • Swift语言同样和Java和OC等语言一样是同样是需要声明常量和变量的,下面就让我们来学习一下Swift的常量和变量。这篇文章主要给大家介绍了关于Swift中常量和变量的区别与声明的相关资料,需要的朋友可以参考下。
  • 常量和变量的区别

    千次阅读 2016-05-31 11:42:45
    由于自己以前傻傻的分不清常量和变量的区别,闹过很多尴尬的事,所以今天来总结一下。 常量顾名思义就是在整个运行过程中值不变。变量是可以在运行过程中再赋值更改的。 常量定义: 在java中用final定义常量,...

    由于自己以前傻傻的分不清常量和变量的区别,闹过很多尴尬的事,所以今天来总结一下。

    常量顾名思义就是在整个运行过程中值不变。变量是可以在运行过程中再赋值更改的。

    常量定义: 在java中用final定义常量,而且常量名习惯大写(所有字母大写) 例如:public static final String PREFIX = "ROBOT";    

    当我们在运行程序时用到公共不变的值时适合设定常量。

    变量定义:我们在写程序时,经常说声明一个变量,这个变量可以赋初始值,也可以不赋。 例如: private  String  a  , int b =0;


    总结:

    简单地说,用final修饰过的就叫常量,常量一旦定义了就不允许被修改。往大的说,定义常量,是不想让某些固定的属性或方法被调用后改变了值,或者被继承后重写。

    往底层说,常量存放在常量池里,在类加载之前就已经被加载,且不会改变。变量刚好相反,允许被改变,调用时要赋值或初始化,存在堆或栈中。

    展开全文
  • Java中静态常量和静态变量的区别

    万次阅读 2019-02-10 01:32:03
    如下:测试java中静态常量和静态变量区别的样例,表明两者加载时的区别。 StaticClass类中定义了静态常量FIANL_VALUE和静态变量VALUE,静态代码块的打印语句表示类被加载 public class StaticClass {   ...

    如下:测试java中静态常量和静态变量区别的样例,表明两者加载时的区别。

    StaticClass类中定义了静态常量FIANL_VALUE和静态变量VALUE,静态代码块的打印语句表示类被加载

    public class StaticClass {  
    
        static {  
            System.out.println("StaticClass loading...");  
        }  
          
        public static String VALUE = "static value loading";  
          
        public static final String FIANL_VALUE = "fianl value loading";  
    }  
    

    StaticClassLoadTest类用于测试静态变量的加载:

    public class StaticClassLoadTest {  
          
        public static void main(String[] args) {  
            System.out.println("StaticClassLoadTest...");  
            printStaticVar();  
        }  
          
        private static void printStaticVar() {  
            System.out.println(StaticVar.FIANL_VALUE);  
            System.out.println(StaticVar.VALUE);  
        }  
          
    }  

    输出:

    StaticClassLoadTest...
    fianl value loading 
    StaticClass loading...  
    static value loading 

    输出显示在打印静态常量时,StaticVar类并没有被加载,在输出静态变量的前才打印类加载信息。这表明类的未加载的情况下也能引用其静态常量信息,原因是因为常量值存储在JVM内存中的常量区中,在类不加载时即可访问。

    注:经过编译优化,静态常量 FIANL_VALUE 已经存到NotInit类自身常量池中,不会加载StaticClass  

     Java中的常量池,实际上分为两种形态:静态常量池运行时常量池

         所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。这种常量池主要用于存放两大类常量:字面量(Literal)符号引用量(Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念,包括了如下三种类型的常量:

    • 类和接口的全限定名
    • 字段名称和描述符
    • 方法名称和描述符

         而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。

    运行时常量池相对于CLass文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是String类的intern()方法。

    String的intern()方法会查找在常量池中是否存在一份equal相等的字符串,如果有则返回该字符串的引用,如果没有则添加自己的字符串进入常量池。

     

    常量池的好处
    常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
    例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。
    (1)节省内存空间:常量池中所有相同的字符串常量被合并,只占用一个空间。
    (2)节省运行时间:比较字符串时,==比equals()快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等。

    因此public static final String FIANL_VALUE = "fianl value loading"; 字面量 被存储到了常量池中。


    但是不能说所有的静态常用访问都不需要类的加载,这里还要判断这个常量是否属于“编译期常量”,即在编译期即可确定常量值。如果常量值必须在运行时才能确定,如常量值是一个随机值,也会引起类的加载,如下:

    public static final int FINAL_VALUE_INT = new Random(66).nextInt();  

     

    展开全文
  • 我下图代码第五行第九行分别定义了一个整型变量和一个整型常量: ...下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。 使用命令行javap -c constant.ConstantFoldi...

    我下图代码第五行和第九行分别定义了一个整型变量和一个整型常量:

    static final int number1 = 512;

    static int number3 = 545;

    Java程序员都知道两者的区别。

    下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。

    使用命令行javap -c constant.ConstantFolding查看.class文件反编译出来的字节码:

    结果:

    这些字节码指令的说明,在wikipedia里有说明:

    wiki: https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

    咱们Java程序员不需要把它们都背下来,只需要把这个网页收藏起来,要用的时候当成字典来用就行:

    sipush 545: 将整数545放置到栈上

    putstatic #16:

    将栈上的值545赋给当前类的静态字段里。

    那么putstatic #16里的#16代表什么含义?

    我们再用javap -v 参数反编译,就能看到这个类的常量池(Constant pool). 大家看下图蓝色高亮的一行:

    constant/ConstantFolding.number3:I

    说明#16代表类constant.ConstantFolding的成员number3,类型为I。

    至此,这两行字节码指令联合起来,实际对应了我们写的Java代码:

    static int number3 = 545;

    我们继续分析javap反编译出来的字节码。

    aload_0: 将序号为0的本地变量的引入加载到栈上

    invokespecial: 调用对象实例上的成员方法,如果有返回值,方法的返回值存储到栈上。具体调用的方法由#标识,可在常量池中查询到对应的方法名。

    ldc: 将常量池上代号为#<数字>的常量的值从常量池加载到栈上。

    我们从下图的常量池列表能发现,序号为#29的常量318976正是整型常量number1(512)和整型常量(623)的积。由此可以看出, number1 * number2这个表达式,因为参与运算的两个操作数通过STATIC和FINAL修饰成为了整型常量,因此其积在编译期就能得到,所以编译器在编译时就计算出来,存储在变量池里,序号为#29。

    那么整型变量做乘法运算,对应的字节码又是什么样的呢?

    从下图序号为3的code开始:

    getstatic #16: 将类的静态成员#16加载到栈上。#16对应的成员为number3,值为545。

    getstatic #18: 将类的静态成员#18加载到栈上。#18对应的成员为number4,值为619。

    imul: 执行栈上两个整数的乘法运算。

    istore_2: 将结果保存到局部变量2里。

    此时,我们Java代码里的int product2 = number3 * number4就执行完了。

    大家看到的剩下的蓝色字节码,都对应了下面这行打印语句。

    System.out.println(“Value: ” + product1 + ” , ” + product2);

    从这些字节码也能看出,Java里我们直接用加号进行字符串拼接操作,Java编译器在编译时,自动使用了StringBuilder进行优化。

    既然整型变量的乘积需要打印出来,因此字节码的iload_2将之前用istore_2保存在局部变量2中的计算结果又加载到栈上,这样乘积结果最后就能输出了。

    希望通过这个简单的例子,大家能学会用javap去深入理解一些Java和JVM的细节。

    要获取更多Jerry的原创技术文章,请关注公众号”汪子熙”或者扫描下面二维码:

    展开全文
  • 二,Java的常量和变量

    2019-11-29 12:03:39
    目录Java的常量和变量一.标识符二.关键字三.变量四.数据类型五.整型字面值及变量声明六.浮点型字面值七.基本数据存储八.字符型字面值(Python中无)九.Unicode编码七.布尔值和字符串字面值八.常量 Java的常量和...
  • 常量分类:静态常量、成员常量和局部常量。 public class demo1 { public static final double PI = 3.14;// 静态常量 final int I = 20; // 声明成员常量 public static void main(String[] args) { final double...
  • https://blog.csdn.net/qq853632587/article/details/78194768 -Java中静态常量和静态变量的区别 静态常量:static final 静态变量:static 这两者都存储在方法区中(个人理解:常量区和静态变量区) 在某些情况...
  • Java的常量和变量

    2019-07-08 20:48:15
    Java中存在这变量和常量,在平时使用中和这两者都是分不开,我们来看看Java的常量和变量有哪些区别和特点吧 常量 常量定义:常量就是一个固定不变量(或者值)已知值。例如 123,45,1.2,false等 常量...
  • Java的常量和变量

    2019-04-13 19:09:00
    注意Python的区别,Python中标识符由字母、下划线数字组成,且数字不能开头,也是严格区分大小写(但是不包含$) 二.关键字 三.变量  1.什么是变量:(Python一致,但是Python在定义变量时不用指定类型...
  • Java语言中变量和常量之间的区别在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。...
  • 1、常量的定义:在程序执行过程中,其值不可以发生改变量。  常量的分类: 类型 举例 类型 举例 整数常量 12,-21 字符串常量 "HelloWorld" 字符常量 ‘a','0','A' 布尔...
  • 1、非基本类型的常量一但赋值后,不能修改其引用,但可以改变引用所指对象属性值: eg: class A { int a ;//类A一个属性 } final A a = new A();//定义一个非基本类型的常量 a a.a=7;这是...
  • 常量和变量都属于变量,常量是赋值后不会再变变量,普通变量可以再进行赋值操作。 // a变量 int a; // b为常量,10为字面量 final int b = 10000; // s为变量,Hello Java为也字面量 string s = "Hello Java"; ...
  • 以下是一个测试java中静态常量和静态变量区别的样例,表明两者加载时的区别。 StaticVar类中定义了静态常量FIANL_VAR和静态变量VAR,静态代码块的打印语句表示类被加载: public class StaticVar { static...
  • ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";...然而这两种实现其实存在着一些性能内存占用差别。这一切都是源于JVM为了减少字符串对象重复创建,其维护了一个特殊内存,这段
  • java的变量和常量以及常量

    千次阅读 2017-10-24 17:39:10
    首先变量名和常量名都是用户自行定义的标志符,遵循先定义后使用的原则,常量和变量的区别是常量之后会不会改变 变量 占据着内存的某一存储区域,该区域有自己的名称和数据类型,该区域的数据可以在同一...
  •         ava中字符串对象创建有两种形式,一种为字面量...,另一种就是使用new这种标准构造对象方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是...
  • 常量和变量

    2020-11-29 17:39:06
    java语言中在,在定义后其值永远不变值就是常量。其值不能改变就是不随时间变化的的某些量信息,也可以是表示某一数值...变量和常量的最大区别是value值可有可无,而且还可以对其进行动态初始化 java语言
  • 的区别:逻辑运算符|||的区别:4.位运算符有哪些5.三元运算符 一、常量 1.什么是常量 在程序的执行过程中其值不发生改变的量。 2.常量的分类 (1)字面值常量 (2)自定义常量(面向对象部分讲解) 字面值常量的分类 (1...
  • Java - 常量 - 变量

    2013-08-19 17:17:38
    常量 值不会改变的量,一旦被定义,它的值就不能再改变 语法: final String NAME = "Tom" 常量名通常使用大写 ...成员变量局部变量的区别 定义位置: 成员变量定义在类中,局部变量定义在方法或者语句块中 存

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,704
精华内容 681
关键字:

java常量和变量的区别

java 订阅