Java核心技术(初阶)知识点复习——[8]常量设计和常量池

1.常量

  java中自己定义的“一个”“不会”修改的变量:public,static,final;

  建议变量名字全大写,并以“_”链接;

注:接口中定义的变量都默认为常量,回顾一下“契约精神”,如:

 

1 public interface SpecialAnimal{
2     String color = "yellow";//默认为:public static final String color = "RED"
3     public void move();
4 }
 1 public class Cat implements SpecialAnimal{
 2     public void move(){
 3         System.out.println("I can move")//这里回顾下,实现一个接口必须实现所有的方法
 4     }
 5 
 6     public static void main(String[] args){
 7         Cat cat = new Cat();
 8         cat.color = "white";//报错,因为color默认为常量啦,(认为都是黄猫)
 9     }
10 }

 

2.常量池

  [1]Java为很多基本类型的包装类/字符串都建立常量池,基本类型除了floar和double都封装成了包装类,在内存中有缓存;

  [2]包括:boolean→Boolean;

      byte→Byte;char→Character;\u000~\u007f

      int→Integer;short→Short;long→Long;-128~127;注意:超过了常量池存储范围时,就不存在缓存了;

      常量字符串都建立常量池缓存机制,同时,存在常量字符串存储的自动优化;

      基本类型自动装箱和拆箱机制,String没有;

  [3]常量化创建方法

1  Integer a = 10;
2  String b = "abc";
3 ******************************
4  Integer c = new Integer(10);
5  String d = new String("abc");

   1~2行是字面量(常量式)赋值创建,存储在栈内存,即被常量化;

   3~4行是对象形式创建,存储在堆内存,不会被常量化;

3.String是一种典型的不可变对象

  [1]故String类型不可直接修改,因为每次修改都重新申请了一块内存,故效率差;

  [2]只可以使用StringBuffer和StringBulider类的append方法进行原地址修改;

   StringBuffer线程安全但速度小于StringBulider

posted @ 2020-04-19 19:03  小菜在路上  阅读(150)  评论(0编辑  收藏  举报