首页 > 其他分享 >引用数据类型的坑

引用数据类型的坑

时间:2023-08-25 16:47:07浏览次数:28  
标签:java 数据类型 somekey list 引用 propertyMap public user

Integer2 !=  Integer2 巨坑

 

最近遇到一个奇怪的问题,存到user中的某个key的数据类型变了

下面这段代码,本来是图方便获取了 map ,然后将list转成string ,然后put回到这个map,然后使用这个map

却不成想,类型也跟着变了。

 

这就是引用类型使用的风险

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

public class Test {

    
        public static void main(String[] args) { 
            User user = new User();
            List<String> list = new ArrayList<String>();
            list.add("1");
            list.add("2");
            list.add("3");
            user.setProperty("somekey", list);
            System.out.println(user.getProperty("somekey").getClass());
            
            // do something stupid
            Map<String, Object> userProMap = (Map<String, Object>) user.getAllProperties();
            userProMap.put("somekey", StringUtils.join((List<String>)user.getProperty("somekey"), ","));
            
            System.out.println(user.getProperty("somekey").getClass());
            
        }
}

class User {

    private Map<String, Object> propertyMap;

    public User() {
        this.propertyMap = new HashMap<String, Object>();
    }

    public Map<String, Object> getAllProperties() {
        return this.propertyMap;
    }
    
    public Object getProperty(String key) {
        return this.propertyMap.get(key);
    }

    public void setProperty(String key, Object value) {
        propertyMap.put(key, value);
    }

}

 

class java.util.ArrayList
class java.lang.String

 

标签:java,数据类型,somekey,list,引用,propertyMap,public,user
From: https://www.cnblogs.com/zno2/p/7053578.html

相关文章

  • java基础数据类型-int类型-day02
    目录1.变量的命名2.常量3.变量4.进制4.1进制转换4.2整型数据类型1.变量的命名记住一点:不可以以数字开头类名:首字母大写的驼峰体变量名,方法名:首字母小写的驼峰体包的名字:与python语言一样全部小写2.常量整形:123实数型:3.14字符:‘a’字符串:"abc"布尔值:truefalse......
  • 数据类型
    数据类型字符类型​char(signed)charc='a';signedcharc='a';分配1个字节存储区,打了个标签为c,将字符'a'对应的数字放到该字节中int-4字节-%dchar-1字节-halfhalf%d-%hhd整型shortintlong转义字符:'''n''\n'-换行符​......
  • 变量常量与垃圾回收机制及数据类型
    内容概要pycharm的简单使用1.如何修改主题 File|Settings|Appearance&Behavior|Appearance|Theme2.如何切换解释器 File|Settings|Project:django_lock|PythonInterpreter3.如何创建python文件 #1.如何创建项目 文件一定是存在于项目中......
  • C++内联函数、引用、强制类型转换
    三、内联函数inline1、普通函数普通函数会被编译成二进制指令存储在代码段中,调用语句会生成一条跳转指令,当程序运行到调用语句时,会跳转该函数在代码段中对应的位置执行,执行结束会返回2、什么是内联函数内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内......
  • 数据类型
    JAVA是一种强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后使用特点:安全性高,速度慢电脑32位最多只能支持4GB,只能装32位操作系统的cpu​64位可以支持128GB,可以装32位和64位的cpu......
  • 基本数据类型和引用数据类型
     目录前言导语总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语基本数据类型和引用数据类......
  • 静态方法引用
    静态方法引用格式类名::静态方法成员方法对象::成员方法本类this::方法父类super::方法名引用构造方法格式类名::new 使用类名引用成员方法String::substring方法引用规则,1需要有函数接口2方法必须存在3被引用形参和抽象方法的第二个形参到最后一个形参必须保持......
  • 软件测试 | 数据类型的转换
    Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可以为“自动类型转换”及“强制类型转换”两种。数据类型的自动转换在程序中已经定义好了数据类型的变量,若要用另一种数据类型表示时,Java会在下列的......
  • GC面临的困境,JVM是如何解决跨代引用的?
    本文已收录至GitHub,推荐阅读......
  • Swift - 基本数据类型,及常/变量声明
    用oc编码已经有段时间了,这期间一直在使用oc和学习oc的编码技巧,忽闻小伙伴说:swift已经是趋势了,有时间多看看吧所以我也开始从网上搜索博客,感谢hangge.com的博客,如有冒犯之处,请多见谅,因为是看着大神的博客开始swif全面的学习之路!方向已定,无论前面有多难,都要走下去! 一、swift中基本的......