探讨:在循环前与在循环中创建对象的区别-阿里云开发者社区

开发者社区> 人语驿边桥> 正文

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

简介: 后端获取的数据格式为 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 得到三个不同的对象。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9899 0
用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
目录 目录 前文列表 扩展阅读 定义数据模型 models 创建表 前文列表 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻博客 (3) — (M)V...
1133 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13636 0
从零开始学Xamarin.Forms(二) 环境搭建、创建项目
原文: 从零开始学Xamarin.Forms(二) 环境搭建、创建项目 一、环境搭建 Windows下环境搭建:     1.下载并安装jdk 、Android SDK和NDK,当然还需要 VS2013 update 2(VS2010、VS2012均可)以上; a.
1121 0
使用 Webix 创建 Email 客户端
Webix 是一个JavaScript UI 库,提供了多达88个UI小部件和功能丰富的 CSS/HTML5 JavaScript 控件。使用 Webix 可以有效地加快 Web 应用的开发。文本将演示了如何通过 Webix 框架,来创建一个 Email 客户端原型。
4731 0
用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
目录 目录 前文列表 视图函数 在 viewspy 文件中定义视图函数 定义右侧边栏的视图函数 为每一张数据表定义视图函数 前文列表 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello Wo...
838 0
对象存储、块存储、文件存储的区别
对象存储、款存储、文件存储的区别
10257 0
DNN皮肤对象[LINKS]和[BREADCRUMB]区别
[LINKS]和[BREADCRUMB]都有level 和separator属性,那[LINKS]是干什么的,[BREADCRUMB]又实现什么? 这么解释吧,假设你有5个兄弟,你的父亲也有五个兄弟,你的儿子也有五个兄弟,你的孙子也有五个兄弟。
536 0
+关注
人语驿边桥
主要从事 Java 后端开发。
41
文章
124
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载