String Object 和new String 的区别

本文解析了Java中String对象的创建过程,阐述了使用字面量和new关键字创建String的区别。当使用字面量时,字符串将被存储在常量池中;而使用new关键字时,每次都会创建一个新的对象。

String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

当 `Map` 的键是 `String` 类型、值是 `Object` 类型时,有以下几种常见情况: ### 取值时的类型转换 在获取 `Map` 里的 `value` 时,会出现类型转换的情况。常用方式如下(当 `key` 不存在时): ```java import java.util.HashMap; import java.util.Map; public class MapValueConversion { public static void main(String[] args) { Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); // 方式 1:强制类型转换 String value1 = (String) map.get("key1"); // 方式 2:使用 String.valueOf() String value2 = String.valueOf(map.get("key1")); } } ``` 这里 `(String)map.get("key")` 是强制类型转换,而 `String.valueOf(map.get("key"))` 是将对象转换为字符串。若 `key` 对应的值为 `null`,`String.valueOf()` 会将其转换为字符串 `"null"` [^1]。 ### 遍历并转换值的类型 若需要将 `Map<String, Object>` 转换为 `Map<String, String>`,可遍历输入映射中的每个条目,把每个条目的值转换为字符串(若值不为 `null`),再将键值对添加到结果映射中: ```java import java.util.HashMap; import java.util.Map; public class MapValueToString { public static Map<String, String> convertMap(Map<String, Object> inputMap) { Map<String, String> resultMap = new HashMap<>(); for (Map.Entry<String, Object> entry : inputMap.entrySet()) { Object value = entry.getValue(); if (value != null) { resultMap.put(entry.getKey(), value.toString()); } } return resultMap; } public static void main(String[] args) { Map<String, Object> inputMap = new HashMap<>(); inputMap.put("key1", "value1"); inputMap.put("key2", 123); Map<String, String> resultMap = convertMap(inputMap); } } ``` ### 存入取出复杂类型的值 若存入的值是 `List` 等复杂类型,取出时是 `Object` 类型,此时需要进行强制类型转换,否则无法拿到数据: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MapComplexValue { public static void main(String[] args) { Map<String, Object> map = new HashMap<>(); List<String> list = new ArrayList<>(); list.add("element1"); map.put("listKey", list); // 取出时需要强制类型转换 List<String> retrievedList = (List<String>) map.get("listKey"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值