字面常量和符号常量是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字面常量和符号常量是啥?相关的知识,希望对你有一定的参考价值。
1、字面常量:包括整形常量,字符型常量,字符串常量。注意:不存在数组常量,结构体常量等结构型的字面常量。但是存在结构型的符号常量2、符号常量:(可以定义结构型常量)用#define和const定义的常量!
这两种常量之间的区别:
#define定义的常量,除了字符串字面常量外都不占内存,所以无法取常量的地址,仅仅是宏替换而已,eg:
①#define NAME “pang dong”;
本质是字符串字面常量,会占用“静态存储区”;
②#define MAX 256;
本质是整形的字面常量,不会分配内存。 参考技术A 字面常量就是它字面上就是一个具体的数据值,如整型6,字符型‘a'等。而符号常量是在宏定义中产生,是将一个符号与某一具体的数据值绑定,在以后使用该符号的时候就直接用其绑定的数据值替换。如#define num 90; 以后出现num的地方就直接用90替换。追问
#define和const呢
#define num 90是字面还是符号?这么深奥-.-
本回答被提问者采纳String常量池以及intert方法
.class文件常量池
常量池主要存放两类常量:字面量和符号引用。
字面量指文本字符串等。
符号引用指:
- 类和接口的全限定名
- 字段的名称和描述符
- 方法的名称和描述符
编译期结束,当类加载器加载类时,.class文件常量被加入运行常量池,如果常量已存在则不再加载。
.class文件常量对象(如String)被创建是预定好的,除非已常量已存在则不再加载。
String intern方法
String str1 = new String("Hello");
String str2 = new String("Hello");
String str1 = new String("Hello").intert();
String str2 = new String("Hello").intert();
intern方法可以再运行期往运行常量池中添加常量。
JDK7,intern方法检查常量池中是否存在此String,如果存在返回常量池对应的引用;如果没有,往常量池中添加该对象的引用,同时返回引用。
intert方法可以避免重复创建相同的String实例,优化内存。
此方法通过常量池判断是否存在相同的String实例,如果存在,将引用指向同个对象,将其他相同但冗余的对象取消引用,利用内存回收机制回收new
创建的对象。如果不存在,在运行常量池加入该对象或其引用。
以上是关于字面常量和符号常量是啥?的主要内容,如果未能解决你的问题,请参考以下文章