注:本文当时写的是基于jdk6或者更早版本;jdk7版本无此问题,但substring操作过多,可能会造成性能问题。
-----------------------------------------------------------------------------------------------------------------------------------
使用以下方法需要注意:
trim()
split()
substring()
实际上,这个很容易造成对整个字符串的引用,从而不回收数据对象。以substring为例
strDate= text.substring(1);
这个strDate将直接引用这个text,而不仅仅是date的字符串,如果text是很长的字符串,或者甚至是文本,那么strDate将间接引用text对象,这显然容易造成内存巨大占用。特别是吧strDate当做Map的key时,那么内存占用将会是巨大的。
上面代码改成
strDate = new String(text.substring(1));
new String方法,将会重新生成String对象,而不是直接引用text对象。
以jsoup为例,jsoup是类似jquery查询方法接口的html/xml解析前,很好用的
public void execute(File f, String encoding) { logger.debug("正在处理" + f.getName()); try { Document doc = Jsoup.parse(f, encoding); Elements elems = doc.select("body >table > tbody > tr[id]");// 选择标签table,属性带id的 for (org.jsoup.nodes.Element elem : elems) { Stat stat = new Stat(); String id = elem.attr("id"); stat.id = new String(id);// (1)需要特别注意这个new String // ......................... results.add(stat); } } catch (Exception e) { e.printStackTrace(); } }
上述代码,如果不用new String的话,那么results引用了stat,每个stat有引用了一个String类型的id,而id是从整个文件,也就是说,每个stat引用了一整个文件,如果results很大,那么整个代码都将是巨大的。
这个类似的情况还包含如下库gson(一个json库,也非常好用),举例如下:
JsonReader reader = new JsonReader(new StringReader(json));
if (token.equals("license")) { String license = reader.nextString(); data.setLicense(new String(license)) }
如果jsonreader传入的是字符串,那么
data.setLicense(new String(license))//注意这里必须用new String(),这样才不会导致data会引用整个json text,而只是引用final String lincene
相关推荐
在这个程序中,主要展示了`String`类的一些常见方法,如`substring()`、`split()`等。下面将详细解释这些方法的使用和原理。 首先,`substring()`方法用于从字符串中提取一部分子串。有两个重载版本,一种是只接受...
### Java基本语法(四)—— 字串和数组 #### 字串(String) 在Java中,`String` 是一种非常重要的数据类型,它代表一系列字符。Java中的字符串是不可变的,这意味着一旦创建了一个字符串对象,其内容就不能更改。...
### 动力节点老杜Java基础入门学习教程分享——常用类 #### String 类 - **不可变性**:`String` 类是不可变的,这意味着一旦一个 `String` 对象被创建,它的值就不能被更改。例如,如果你有一个 `String s = ...
【JAVA课程设计报告心得体会——计算器、文本编辑器】 在JAVA课程设计中,我参与了计算器与文本编辑器的开发,这是一次深入理解和实践JAVA编程的宝贵经历。这两个项目不仅涵盖了JAVA的基础语法,还涉及到了面向对象...
Java 中由 substring 方法引发的内存泄漏详解 Java 中的 substring 方法是一个非常常用的字符串操作方法,但是在 JDK 1.6 中,如果不当使用该方法,可能会导致严重的内存泄漏问题。下面我们将详细介绍 Java 中由 ...
- **常用方法**:熟悉indexOf、substring、trim、concat、split等字符串操作。 6. **IO流** - **流的分类**:了解字节流和字符流的区别,以及输入流和输出流的使用。 - **缓冲流与转换流**:BufferedReader、...
在 JDK 6 中,使用 substring 方法可能会出现的问题是,如果你只需要使用很短的一段字符串,但是你实际上引用了整个字符串,这个很长的字符串无法被回收,造成了存储空间的浪费,甚至可能造成内存泄漏。这是一个已知...
还有`toLowerCase()`和`toUpperCase()`用于转换字符串为小写或大写,`trim()`去除两端的空白字符,以及`split(String regex)`根据正则表达式分割字符串。 `String`类与`StringBuilder`和`StringBuffer`的区别在于,...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...
前段时间摸索在Java中怎么获取系统信息包括cpu、内存、硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取。下面列举出...
在Java编程语言中,`String`类提供了许多用于操作字符串的方法,其中之一便是`split`方法。这个方法在处理文本数据时极为有用,特别是在需要根据特定的分隔符将字符串分割成多个子串的情况下。下面,我们将深入探讨`...
Java JDK 6是Java开发工具集的一个重要版本,它为开发者提供了广泛的编程工具和技术支持,使得Java应用程序的开发、编译、调试和运行变得更加高效。本篇学习笔记将围绕Java JDK 6的关键特性进行深入探讨。 一、Java...
在Java编程语言中,`substring()`方法是字符串类(String)的一个重要成员,它用于从原始字符串中提取子串。这个方法非常实用,特别是在处理文本数据时,我们需要根据特定的需求截取字符串的一部分。下面我们将详细...
Java.lang.String类是Java语言中的一种基本数据类型,该类的定义、字段属性、构造方法、equals方法、hashCode方法、charAt方法、compareTo方法、concat方法、indexOf方法、replace方法、split方法、substring方法、...
在Java面试中,掌握核心知识点和能够解决实际问题的能力至关重要,特别是对于想在BAT(百度、阿里巴巴、腾讯)这样的顶级互联网公司工作的求职者而言。以下是一些基于标题和描述所暗示的Java面试知识点的详细说明: ...
在Java编程语言中,工具类(Util)是程序员日常开发中不可或缺的一部分,它们提供了一些预定义的方法,方便处理各种常见的任务。以下是我个人对Java中常用工具类的总结,主要涉及了加密、文件上传和日期处理等核心...
js substring(start,end)表示从start,到end之间的字符串,包括start位置的字符但是不包括end位置的字符 java sbustring(start,end)表示从start,到end之间的字符串,包括start位置的字符它包括end位置的字符 c# ...
Java中的String.trim()方法是一个用于移除字符串两端空白字符的标准方法,然而,它所移除的不仅仅是空格字符。trim()方法真正的作用是移除字符串首尾的所有空白字符,包括空格、制表符(tab)、换行符等。在编程中,...
本文主要分析了三个使用双指针技术解决的题目,分别来自剑指Offer计划13的Java实现,包括调整数组顺序使奇数位于偶数前面、寻找和为s的两个数字以及翻转单词顺序。 1. **调整数组顺序使奇数位于偶数前面** 题目...
在Java编程语言中,`substring()`方法是`String`类的一个非常重要的成员,它用于从一个给定的字符串中截取或提取出一部分新的子字符串。`substring()`提供了两种主要的使用形式,这两种形式都在处理字符串时发挥着...