HashMap 声明和不声明有什么区别 HashMap map= null;和HashMap map=new HashMap();有什么区别.需要注意什么地方 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请问楼主理解的“声明”是什么?HashMap map; // 这叫声明HashMap map = null; //这是声明的同时初始化为null// 上面两句如果出现是出现在成员变量的定义中,作用等价,因为成员变量会隐式初始化为nullHashMap map = new HashMap(); // 这句是声明的同时初始化为new HashMap(); HashMap map= null定义了一个HashMap的对象,引用了空的内存空间HashMap map=new HashMap(); 定义了一个HashMap的对象map,同时在堆内存中开辟了一个空间并使map对象引用它大概就是这个意思,书面文不太会 HashMap map = null; 表示声明了一个可以存放HashMap类型的变量map,不过尚未初始化,内存示意如下:+-------+| map |+-------+HashMap map = new HashMap();这个不仅声明了一个可以存放HashMap类型的变量map,还给它进行了初始化工作,内存示意如下: HashMap对象+-------+ +------------+| map | ----> | HashMap属性 |+-------+ | 有很多的属性 | +------------+ | HashMap方法 | | 有很多的方法 | +------------+ 有啥区别??1 字数不同,第二个更长2 结果不同,第一个不能直接使用,因为是null. 第二个可以直接put和get了! new HashMap()构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。 而HashMap map = null;只是有了一个HashMap的对象 不同意4楼哦。HashMap map = null; //这已经初始化了,不过是初始化为null。第一副图画的也不准确,map应该是有所指的!和完全没有所指的变量有本质的区别。比较一下下面的变量o和p,就知道区别是本质性的了。void f() { Object o; //o未被初始化,不能使用 Object p = null; //p已经初始化了,可以使用 g(o) //! 编译错误,因为o没有初始化 g(p) // 无编译错误,但运行时可能会有异常。}void g(Object o) {}所以。不初始化一个变量 =/= 将一个变量初始化为null不过,如果是成员变量的声明,则有所不同,因为成员变量是隐式初始化的,也就是说java不允许有未被初始化的成员变量,如果你没有显式初始化一个成员变量,则由编译器来完成,所以下面的代码中o和p的编译结果是一样的,都初始化为null,因为他们是成员变量。public class Foo { Object o; Object p = null; 声明的话,可以在下面任一地方使用,保证下面用的话,是这个对像,也就是一个对象的意思。而,new 的话,不有这种效果,。 谢谢Dan1980的指正图是画错了,这个图表示的是:HashMap map; 的语义(这个是没有初始化)。并不是表示HashMap map = null; 的语义(这个已经初始化了),指向了一个null,呵呵~~表要拿砖拍我哦~~ 问一下啊HashMap到底怎么用啊我一直搞不清楚汗~~~~ GUI小程序中的奇怪现象 求高手解答 在Eclipse中可以执行 但在dos下不能编译! 关于JAVA继承问题 请问怎样判断ResultSet查询结果是否为空? 急急急,全局变量传参问题(附精简源码) 有关James配置数据库的问题,请高手进入! 小弟正在用java做通信方面的(用SNMP),刚接触java,请问哪为高手大哥推荐参考书。 那里有数据结构-java描述的下载? 问个傻问题。 如何不把SQL语句直接写在JAVA程序代码里 java中如何在代码中判断时间是否过了10秒 请问下有没有简单的JSP分页讲解。谢谢 关于socket Connection reset的问题
定义了一个HashMap的对象,引用了空的内存空间
HashMap map=new HashMap();
定义了一个HashMap的对象map,同时在堆内存中开辟了一个空间并使map对象引用它
大概就是这个意思,书面文不太会
表示声明了一个可以存放HashMap类型的变量map,不过尚未初始化,内存示意如下:+-------+
| map |
+-------+
HashMap map = new HashMap();
这个不仅声明了一个可以存放HashMap类型的变量map,还给它进行了初始化工作,内存示意如下: HashMap对象
+-------+ +------------+
| map | ----> | HashMap属性 |
+-------+ | 有很多的属性 |
+------------+
| HashMap方法 |
| 有很多的方法 |
+------------+
1 字数不同,第二个更长
2 结果不同,第一个不能直接使用,因为是null. 第二个可以直接put和get了!
而HashMap map = null;只是有了一个HashMap的对象
第一副图画的也不准确,map应该是有所指的!和完全没有所指的变量有本质的区别。比较一下下面的变量o和p,就知道区别是本质性的了。
void f() {
Object o; //o未被初始化,不能使用
Object p = null; //p已经初始化了,可以使用
g(o) //! 编译错误,因为o没有初始化
g(p) // 无编译错误,但运行时可能会有异常。
}
void g(Object o) {
}
所以。不初始化一个变量 =/= 将一个变量初始化为null不过,如果是成员变量的声明,则有所不同,因为成员变量是隐式初始化的,也就是说java不允许有未被初始化的成员变量,如果你没有显式初始化一个成员变量,则由编译器来完成,所以下面的代码中o和p的编译结果是一样的,都初始化为null,因为他们是成员变量。
public class Foo {
Object o;
Object p = null;
而,new 的话,不有这种效果,。
我一直搞不清楚
汗~~~~