赋值问题 stringarraylist赋值 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 list.add(new ArrayList());ArrayList list1=(ArrayList) list.get(1);因为你把new ArrayList()赋给list1了。 It does not have to allocate a node object for each element in the ListArrayList 的元素类型默认是不限定的这意味着,任何类型的对象都可以作为 ArrayList 的元素那么,问题解决了 首先需要明确的是Arraylist里面存的是什么??Arraylist里面存放的都是基本对象类型Object,也就是说从Arraylist里面取元素的时候我们并不知道元素的类型(String或者Arraylist)。当我们需要从Arraylist里面获取元素的时候我们必须知道这个元素在没有放到Arraylist里面之前的类型,然后将该元素强制转化为此类型:ArrayList list1=(ArrayList) list.get(1);String ssss=(String) list.get(0);为什么第一个强制转化为Arraylist,第二个强制转化为String??废话,在放到Arraylist之前,第一个元素的类型就是Arraylist,去出来的时候当然应该强制转化为Arraylist。我们做一个假设,一个Arraylist对象,放到Arraylist当中,作为其中的一个元素,取出来的时候,强制将这个元素转化成String类型,这样还有什么后果???还是废话,肯定出错!!所以用Arraylist的时候,最关键的是放进Arraylist的元素原本是什么类型,取出来的时候一定要记得将元素强制转化为这个类型,否则Arraylist是没办法用的 哥哥们,你们能审队题吗?list.get(0)赋值给String ssss后,对ssss操作不影响list.get(0);而把list.get(1)赋值给list1后,在list1中添加了两个元素此时取list.get(1)时能取到这两个元素,这说明list.get(1)被修改了。同样赋值,String 未 修改,arraylist修改了。我想的是string 只赋了值,arraylist却赋了地址,那么问题就来了,java中的“=”赋值的原理是什么。如果class a{String a;String[] aa;}那赋值是什么,难道a是赋值,aa是赋的地址吗 大家都审错题,就是你自己的问题了,如果4#的话贴到1#的话就不会有人审错了。java中的"="可以理解为值传递,等号右边的值传给左边,只不过对象传的是地址这个值,基本类型传的是数值。你问这个问题是因为你没搞清String是特殊对象,不存在什么string只赋了值这种事,"abc"在java中不是一个值,而是一个隐式的字符串对象,所以才可以调用"abc".toString()这种方法。此外,java中String不是存在堆内,而是string pool中,其本身是不可变对象,所以你当然不能改变它。 其实楼主可以去看看java编程思想的第三章赋值相关的说明,基本类型和类类型赋值 list.get(0)中一直是"aaaa"字符串,赋给ssss的值,ssss自己指向新的对象,但是list,get(0)仍然指向原来字符串.list.get(1)一直存储ArrayList对象,只要这个对象内容改变,它访问这个对象获得的内容也跟着改变. 这里问的大概就是字符串为什么没有变,因为字符串是final类,比较特殊,具体的应该可以从楼上的一些回答找到答案。 不好意思,解释不到位关于集合:如果是普通对象,则存引用如果是基础数据类型,则存值字符串属于特殊的引用类型,有它自己的常量池,创建出的字符串会存在常量池中,是无法修改的则:1>.list.add("aaaa");//list.get(0)指向aaaa的常量池地址2>.String ssss=(String) list.get(0);//ssss指向aaaa的常量池地址3>.ssss="121weq";//ssss修改为指向121weq的常量池地址所以list存的始终是常量池地址,是不受ssss影响的那么即使将步骤改为2,1,3,.list.add("aaaa");改为list.add(ssss);,list存的依然是常量池地址,同样不受ssss影响 你有一个篮子,你往篮子里放了玉米和一个书包,书包里又有苹果和桔子,默认存放是有顺序的,好,当list.get(0)时,得到的是玉米。当list.get(1)的时候就应该是个书包,书包又看做是一个集合。又能从里面一次拿出苹果核桔子。 请问,Java如何使用多线程重绘?有哪几种方法,哪种比较好? 大家给推荐本JAVA入门到精通 java.lang.integer错误 swing 派发线程,大家帮忙看一下 toString()这个方法怎么用?? 哪位大虾帮我找找错误,我想覆盖Object类的equals()方法 怎样实现在applet中调用cmd啊 概率的问题! 如何获取一幅图像的所有象素的颜色值? 在Java中如何删除一个文件?? WIN7旗舰版32位如何装java,装java哪个版本好? 关于Boolean对象的compareTo方法的一些疑惑
ArrayList list1=(ArrayList) list.get(1);
因为你把new ArrayList()赋给list1了。
也就是说从Arraylist里面取元素的时候我们并不知道元素的类型(String或者Arraylist)。
当我们需要从Arraylist里面获取元素的时候我们必须知道这个元素在没有放到Arraylist里面之前的类型,然后将该元素强制转化为此类型:
ArrayList list1=(ArrayList) list.get(1);
String ssss=(String) list.get(0);
为什么第一个强制转化为Arraylist,第二个强制转化为String??废话,在放到Arraylist之前,第一个元素的类型就是Arraylist,去出来的时候当然应该强制转化为Arraylist。
我们做一个假设,一个Arraylist对象,放到Arraylist当中,作为其中的一个元素,取出来的时候,强制将这个元素转化成String类型,这样还有什么后果???还是废话,肯定出错!!
所以用Arraylist的时候,最关键的是放进Arraylist的元素原本是什么类型,取出来的时候一定要记得将元素强制转化为这个类型,否则Arraylist是没办法用的
list.get(0)赋值给String ssss后,对ssss操作不影响list.get(0);
而把list.get(1)赋值给list1后,在list1中添加了两个元素此时取list.get(1)时能取到这两个元素,这说明list.get(1)被修改了。
同样赋值,String 未 修改,arraylist修改了。
我想的是string 只赋了值,arraylist却赋了地址,
那么问题就来了,java中的“=”赋值的原理是什么。
如果class a{
String a;
String[] aa;
}
那赋值是什么,难道a是赋值,aa是赋的地址吗
java中的"="可以理解为值传递,等号右边的值传给左边,只不过对象传的是地址这个值,基本类型传的是数值。
你问这个问题是因为你没搞清String是特殊对象,不存在什么string只赋了值这种事,"abc"在java中不是一个值,而是一个隐式的字符串对象,所以才可以调用"abc".toString()这种方法。
此外,java中String不是存在堆内,而是string pool中,其本身是不可变对象,所以你当然不能改变它。
list.get(1)一直存储ArrayList对象,只要这个对象内容改变,它访问这个对象获得的内容也跟着改变.
关于集合:
如果是普通对象,则存引用
如果是基础数据类型,则存值
字符串属于特殊的引用类型,有它自己的常量池,创建出的字符串会存在常量池中,是无法修改的则:
1>.list.add("aaaa");//list.get(0)指向aaaa的常量池地址
2>.String ssss=(String) list.get(0);//ssss指向aaaa的常量池地址
3>.ssss="121weq";//ssss修改为指向121weq的常量池地址所以list存的始终是常量池地址,是不受ssss影响的那么即使将步骤改为2,1,3,.list.add("aaaa");改为list.add(ssss);,list存的依然是常量池地址,同样不受ssss影响
好,当list.get(0)时,得到的是玉米。当list.get(1)的时候就应该是个书包,书包又看做是一个集合。又能从里面
一次拿出苹果核桔子。