lz:永远不要拿String当作参照物,String是java中除了Object以外,最特殊的一个class,由于它的使用量极大(我们几乎已把它视作是和int一样的原生类型),它受到了特殊照顾,编译器会在编译阶段尽其所能进行优化,例如直接把多个+拼接的字符串直接编译为一个String,( 例如:String a = "abc" + "xyz" + "123" --编译--> String a = "abcxyz123")或者使用单个StringBuffer(例如String a = x + y + z --编译--> String a = new StringBuffer().append(x).append(y).append(z),当然如果是早期JDK的话,可能编译成多个StringBuffer)。如果你 String s for (int i = 0; i < 10; i++) { s = new String("abc"); } 照样产生多个String
List list=new ArrayList();
for(int i=0;i<10;i++)
{
Map map=new HashMap();
map.put("aaa","aaa"+i);
map.put("bbb","bbb"+i);
list.add(map);
}
Map map1=(Map)list.get(0);
System.out.println("map1="+map1.get("aaa"));
String s="hello"
String s2=s;
这里只产生一个对象。
是否hashMap等也可以做到?
对象实例是新建立出来的,如new HashMap()、"hello"
对象变量实际上是接收并保存实例内存首地址的指针HashMap map;
for(int i=0;i<10;i++)
map=new HashMap();
是让变量map代表了解10个HashMap的实例String s="hello"
String s2=s;
是让变量s、s2都指向了存"hello"的首地址
HashMap map=new HashMap;
for(int i=0;i<10;i++)
m.put("object",i);
循环完之后m实际上只相当于put了一次对吗?如果解决这样的问题,不让它产生多余的对象,而让它产生同等效果/
for(int i=0;i<10;i++)
m.put("object",i);
由于put方法的第一参数(key)相同,所以只相于放了最后一次,不过第二参数也要是对象哦!;
CompareTO()函数在起作用!请看http://dev.csdn.net/article/79/79500.shtm中的文章,里面有对容器和排序的详细介绍!
不信你试试:Object obj=null;
ArrayList array=new Array();
for(int i=0;i<10;i++)
{
obj=new Object();
array.add(obj);
}
System.out.println("array中有"+array.size+"个对象实例");HashMap map=new HashMap();
for(int i=0;i<10;i++)
{
obj=new Object();
map.put("a01",obj);
}
System.out.println("map中有"+map.size+"个对象实例");HashMap maps=new HashMap();
for(int i=0;i<10;i++)
{
obj=new Object();
maps.put("a0"+i,obj);
}
System.out.println("maps中有"+maps.size+"个对象实例");
例如:String a = "abc" + "xyz" + "123" --编译--> String a = "abcxyz123")或者使用单个StringBuffer(例如String a = x + y + z --编译--> String a = new StringBuffer().append(x).append(y).append(z),当然如果是早期JDK的话,可能编译成多个StringBuffer)。如果你
String s
for (int i = 0; i < 10; i++) {
s = new String("abc");
}
照样产生多个String
然后 map=null;这样处理,返回的list里面便是null对吗,就是说把map赋给list之后,list里面的内容仍然需要map的支持,对吗?
然后 map=null;这样处理,返回的list里面便是null对吗,就是说把map赋给list之后,list里面的内容仍然需要map的支持,对吗?是因为你的map与list中的元素指向的是同一个实例,所以你map=null;使list中也有了个空实例但你这样就不一样了:
list.add(map);
map=new HashMap();
map=null;
这时list中就没受影响。
所以还是一句话你对“对象变量与对象实例是两个概念。”还是没想透
对象实例是新建立出来的
对象变量实际上是接收并保存实例内存首地址的指针
list.add(map);
map=new HashMap();
map=null;
这时list中就没受影响。呵呵,但是这样基本上没什么意义啊,已经new了一个map,相当于已经创建了一个空对象了啊。楼上的别这么说,如果只有分数,这个论坛不会有这么多人上来。