`
hellsing42
  • 浏览: 261759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在使用ArrayList时注意里面对象是否都是新的内存

J# 
阅读更多
遇到个这样的错误
    
         byte[] bKey=new byte[1];

         ArrayList byteList=new ArrayList();
 for(int i=0;i<10;i++){
         MessagePacket packet=new MessagePacket();
           packet.setKey(bKey);
            byteList.add(packet);  
          }
  for(int j=0;j<byteList.size();j++){
         System.out.println(((MessagePacket)byteList.get(i)).getKey()[0])
   }

由上代码输出会发现对象MessagePacket里的属性key都变成了9,因为只在循环外创建了一个新的对象bKey,而把他的引用给了10个MessagePacket对象,只要此值一变,10个对象里的属性跟着全变。。。导致错误,所以应该把
    byte[] bKey=new byte[1];
放到循环里,这样就创建了10个对象并且将其引用给了bKey再由他分发到MessagePacket里,这样每个MessagePacket下的key都是不同的对象(即不同的内存空间,否则其实是同一个东西。。。),就像烂大街的String的引用,虽然简单,但还是犯错。。。。搞了一下午。。。
分享到:
| 111
评论

相关推荐

    超级有影响力霸气的Java面试题大全文档

     ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,...

    .net性能优化宝典

    - **复用对象**:当对象不再使用时,应考虑将其重用于后续操作,而不是创建新的对象。 - **利用静态字段**:如果一个对象的值在整个程序运行期间都不会改变,可以考虑将其作为静态字段存储,以减少对象的创建次数。 ...

    二十三种设计模式【PDF版】

    在浏览《Thingking in Java》(第一版)时,你是不是觉得好象这还是一本 Java 基础语言书籍?但又不纯粹是,因为这本书的作 者将面向对象的思想巧妙的融合在 Java 的具体技术上,潜移默化的让你感觉到了一种新的语言...

    net学习笔记及其他代码应用

    45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,...

    android GridView 添加图片

    - 数据源可以是ArrayList(图片路径)、ArrayList(图片对象)或者使用ContentProvider返回的URI列表。 8. **性能优化** - 使用ViewHolder设计模式提高滚动流畅性,减少findViewById()的调用次数。 - 缩放图片大小以...

    SCJP题库

    描述中提到的“考试时有20道左右的题目跟里面的一模一样”,这表明这些题库对于熟悉考试格式、题型和常见问题类型是很有价值的。然而,值得注意的是,Oracle公司不断更新其考试内容,以防止考生仅仅依赖特定的题库...

    GridView实现九宫格布局

    1. 创建数据源:这可以是一个ArrayList,里面包含你需要展示的数据对象。每个对象可以根据需求包含多个键值对,例如图片URL和对应的文字描述。 2. 创建数据映射:定义一个二维数组,用于描述数据源中的每个键值对...

    取外部ListView内容.e.rar

    - 数据源可以是数组、ArrayList或者其他集合类,包含要显示的对象。 - 将数据源传递给Adapter,例如`adapter = new CustomAdapter(context, R.layout.list_item, dataList);` 4. **设置ListView**: - 在主布局...

    在java List中进行模糊查询的实现方法

    但如果是在内存中处理小型数据集,以上两种方法都是可行的选择。此外,还可以考虑使用Java 8的Stream API来简化代码并提高效率,或者使用专门的搜索库,如Apache Lucene,来实现更复杂的模糊查询需求。

    实现数据库的连接和访问的各种操作的实现

    5. **关闭资源**:最后,确保所有打开的资源(如`Connection`、`Statement`和`ResultSet`)都被正确关闭,以避免内存泄漏等问题。 #### 二、使用ibatis组件实现数据库操作 ibatis(现称为MyBatis)是一个优秀的...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级 一开始就构建站点的完整功能,然后针对浏览器测试和修复。认为应该针对那些最高级、最...

    Codeforces

    Java的特点包括跨平台性、自动内存管理(垃圾回收)以及丰富的类库,这些都使得Java在处理算法问题时显得尤为适合。 1. **基础语法与数据结构** - Java的基础语法包括变量、常量、控制流(if、switch、for、while...

    解析Java按值传递还是按引用传递

    Java是一种面向对象的编程语言,在Java中,对于方法的参数传递有两种方式:按值传递和按引用传递。这两种方式都有其特点和应用场景,本文将对这两种方式进行详细的介绍和分析。 一、按值传递 按值传递是指在方法...

    Android应用中使用DOM方式解析XML格式数据的基本方法

    在Android应用开发中,使用DOM(文档对象模型)解析XML格式的数据是一种常见的数据处理方式,但它的效率在处理大数据量时并不高,因此在数据量大时并不推荐使用。本文将详细介绍如何在Android应用中使用DOM方式解析...

Global site tag (gtag.js) - Google Analytics