探讨:在循环前与在循环中创建对象的区别

简介: 后端获取的数据格式为 List ,而前端需求的数据格式为 Json。因此,后端需要将数据重新组装为 Json 格式才能传给前端接收。而在数据重新组装的过程中会遇到这样的问题,在将对象从 List 逐个获取放入另一个 List 时,这个中间对象是在对 List 循环之前创建还是循环中创建。

【业务场景】

后端从数据库中获取数据传给前端。

后端获得的数据格式:List

前端需求的数据格式:Json

【场景分析】

后端获取的数据格式为 List ,而前端需求的数据格式为 Json。因此,后端需要将数据重新组装为 Json 格式才能传给前端接收。而在数据重新组装的过程中会遇到这样的问题,在将对象从 List 逐个获取放入另一个 List 时,这个中间对象是在对 List 循环之前创建还是循环中创建。

这两种不同创建对象的方式会导致两种不同的组装效果。而这两种效果,一个是对的,一个是错的。

【示例代码】

代码运行环境

  • jdk: 1.8
  • 插件:lombok
  • 框架:springboot

Item 实体

/**
 * Item 对象
 */
@Data
public class Item {

    private String ItemId;
    private String ItemName;

}

循环类

import java.util.ArrayList;
import java.util.List;

public class CreateObject{
    public static void main(String[] args) {
        //初始化数据
        List<Item> itemListIn = new ArrayList<>();

        Item item_1 = new Item();
        item_1.setItemId("1");
        item_1.setItemName("item_1");

        Item item_2 = new Item();
        item_2.setItemId("2");
        item_2.setItemName("item_2");

        Item item_3 = new Item();
        item_3.setItemId("3");
        item_3.setItemName("item_3");

        itemListIn.add(item_1);
        itemListIn.add(item_2);
        itemListIn.add(item_3);

        //在循环外部创建对象
        List<Item> itemListOut_t1 = new ArrayList<>();
        //创建中间对象 item_t1
        Item item_t1 = new Item();
        for (Item itemIn : itemListIn) {
            item_t1.setItemId(itemIn.getItemId());
            item_t1.setItemName(itemIn.getItemName());
            itemListOut_t1.add(item_t1);
        }

        System.out.println("循环外部创建对象");
        System.out.println("循环结束后,传给前端的数据:");
        System.out.println(itemListOut_t1);

        //在循环内部创建对象
        List<Item> itemListOut_t2 = new ArrayList<>();
        for (Item itemIn : itemListIn) {
            //创建中间对象 item_t2
            Item item_t2 = new Item();
            item_t2.setItemId(itemIn.getItemId());
            item_t2.setItemName(itemIn.getItemName());
            itemListOut_t2.add(item_t2);
        }

        System.out.println("循环内部创建对象");
        System.out.println("循环结束后,传给前端的数据:");
        System.out.println(itemListOut_t2);
    }
}

运行结果

_

【代码分析】

通过控制台可以很容易地看出来,在循环外部创建对象是错误的,在循环内部创建对象是正确的。

产生出两种不同输出效果的原因如下:

在循环外部创建对象,使得循环内部一直使用同一个对象,虽然 itemListIn 循环了三次,item 也被三次添加到 itemListOut_t1,但是三次都是同一个对象,换句话说,最后 itemListOut_t1 得到的三个对象是相同的。

而在循环内部创建对象,循环内部使用的是三个不同的对象,最后 itemListOut_t1 得到三个不同的对象。

相关文章
|
2月前
|
Python
循环的嵌套
在编程中,循环结构是一种非常重要的控制结构,用于重复执行一段代码。而循环的嵌套则是指在一个循环内部又包含了另一个或多个循环,使得代码的执行更加复杂和灵活。本文将介绍循环嵌套的概念、使用场景以及示例代码。
32 1
|
7月前
|
机器学习/深度学习 存储 Java
分支结构 && 方法的创建和调用 && 方法递归 && 数组的创建和使用 && 类和对象的认识 && 内部类 && 认识继承
分支结构 && 方法的创建和调用 && 方法递归 && 数组的创建和使用 && 类和对象的认识 && 内部类 && 认识继承
41 0
|
4月前
while循环和do while循环有什么区别
while循环和do while循环有什么区别
33 0
|
9月前
for循环的实例
for循环的实例
45 1
|
6月前
while循环和do while循环有什么区别?
while循环和do while循环有什么区别?
72 0
|
7月前
|
Python
python之while循环,无限循环,while循环的嵌套的定义和使用。
python之while循环,无限循环,while循环的嵌套的定义和使用。
|
11月前
|
Java
三种循环的区别
三种循环的区别
60 0
|
JavaScript 前端开发
使用语句 1 来初始化循环中所使用的的变量
使用语句 1 来初始化循环中所使用的的变量
48 0
|
存储
循环内不要不断创建对象引用
循环内不要不断创建对象引用
160 0