String,arraylist, hashmap初始化

1.
List list = new ArrayList();
上面的初始化和如下有什么区别吗
ArrayList list = new ArrayList();
上面那个list变量是List接口的实例,可以再被赋值为所有实现了List接口的类或其子类的实例,这个list变量可以当作List接口及其其父接口作为参数传递。
而下面那个list变量表示ArrayList类的实例,必须是ArrayList类或其子类的实例才可以赋值给这个list变量,这个list变量可以当作ArrayList类或其父类作为参数传递,也可以作为ArrayList类及其父类实现了的接口类型作为参数传递(例如List接口)。

方式一:

  ArrayList<String> list = new ArrayList<String>();
  String str01 = String("str01");
  String str02 = String("str02");
  list.add(str01);
  list.add(str02);

方式二:
 
   ArrayList<String> list = new ArrayList<String>(){{add("str01"); add("str02");}}; 

2. HashMap 初始化

Map<String, String> hashMap = newHashMap<String, String>(){
 

                {
                  put("A", "a");
                  put("B", "b");
                                 
};


字符串可能是任何程序语言中都会出现的对象,java中创建并初始化一个String对象,最常见的方式有两种:

String str=new String("XXX");
String str="XXX";   
      二者看似相同,其实有很大的差别。
      前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象;后者则会在栈中创建一个对象引用变量str,然后 查看字符串池中是否存在"XXX",如果没有,则将"XXX"存放字符串池,并令引用变量str指向它;如果已经有"XXX",则直接令str指向它。这样充分利用 了栈的数据共享优点,当然也可能是一个陷阱,对象很有可能没有创建,只不过指向一个先前已经创建的对象;而new()方法则能保证每次都创建一个新的对 象。
      下述代码展示了二者的不同:
Java代码  
1. public class Main { 
2.  
3.     /** *//**
4.      * @param args the command line arguments
5.      */ 
6.     public static void main(String[] args) { 
7.         String strA = "abc"; 
8.         String strB = "abc"; 
9.         String strAA = new String("abc"); 
10.         String strBB = new String("abc"); 
11.         System.out.println(strA == strB); 
12.         System.out.println(strAA == strBB); 
13.     } 
14. } 

输出结果:
true
false
字符串限定是指String s = “abc”这种形式,也就是说String s1 = “abc”;
s 和 s1 都是指向同一个内存地址
String s = "abc";
这句是定义一个String变量s,jvm会先去字符串池中找有没有"abc",有的话就把s指向"abc",没有就会先在池中创建一个,再让s指向"abc"。
String s = new String("abc");
这句是先定义一个String变量s,然后在内存中分配新的空间"abc"再让s指向这个内存地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值