### Java编程:常见问题汇总 #### 字符串连接误用 **错误的写法:** ```java Strings = ""; for (Person p : persons) { s += "," + p.getName(); } s = s.substring(2); // 去除第一个逗号 ``` 此段代码存在以下问题: 1. **性能问题:**直接使用`+`操作符进行字符串连接会导致多次创建新的字符串对象,从而降低程序运行效率。 2. **去除首逗号:**虽然通过`substring(2)`去除了首部的逗号,但这不是最佳实践。 **正确的写法:** ```java StringBuilder sb = new StringBuilder(persons.size() * 16); // 预估缓冲区大小 for (Person p : persons) { if (sb.length() > 0) sb.append(","); sb.append(p.getName()); } ``` 改进之处: 1. **使用`StringBuilder`而非直接拼接:**`StringBuilder`可以高效地进行字符串拼接。 2. **预分配内存:**根据集合的大小预先分配足够的内存空间,避免了多次扩容带来的性能开销。 #### 错误的使用`StringBuffer` **错误的写法:** ```java StringBuffer sb = new StringBuffer(); sb.append("Name:"); sb.append(name + '\n'); sb.append("!"); String s = sb.toString(); ``` 问题分析: 1. **未指定初始容量:**这可能导致在频繁调用`append`方法时,内部数组不断扩容,降低性能。 2. **使用`StringBuffer`而非`StringBuilder`:**除非明确需要线程安全,否则建议使用`StringBuilder`,因为其性能更优。 **正确的写法:** ```java StringBuilder sb = new StringBuilder(100); sb.append("Name:"); sb.append(name); sb.append("\n!"); String s = sb.toString(); ``` 改进之处: 1. **初始化指定长度:**这有助于减少不必要的内存分配和重分配。 2. **使用`StringBuilder`代替`StringBuffer`:**除非确实需要线程安全性,否则推荐使用`StringBuilder`。 #### 测试字符串相等性 **错误的写法:** ```java if (name.compareTo("John") == 0) if (name == "John") if (name.equals("John")) if ("".equals(name)) ``` 问题分析: 1. **`compareTo`方法:**通常用于按自然顺序或字典顺序对字符串进行比较,并不适合用来判断是否相等。 2. **使用`==`进行字符串比较:**`==`用于比较对象引用是否相同,而不是内容是否相同。 3. **空字符串检查:**使用`length()`或`isEmpty()`方法来判断字符串是否为空更为恰当。 **正确的写法:** ```java if ("John".equals(name)) if (name.length() == 0) if (name.isEmpty()) ``` 改进之处: 1. **使用`.equals()`进行比较:**确保比较的是字符串的内容而不是引用。 2. **使用`.length()`或`.isEmpty()`判断空字符串:**这些方法更加直观且准确。 #### 数字转换成字符串 **错误的写法:** ```java "" + set.size() new Integer(set.size()).toString() ``` 问题分析: 1. **使用`+`操作符连接数字与空字符串:**虽然有效,但不直观。 2. **使用`new Integer(...).toString()`:**这种方式不仅效率低,还会创建不必要的`Integer`对象。 **正确的写法:** ```java String.valueOf(set.size()) ``` 改进之处: 1. **使用`String.valueOf()`:**该方法不仅简洁,而且效率高。 #### 利用不可变对象(Immutable) **错误的写法:** ```java zero = new Integer(0); return Boolean.valueOf("true"); ``` 问题分析: 1. **创建不必要的对象:**每次创建`new Integer(0)`都会生成一个新的对象。 2. **错误使用`Boolean.valueOf(String)`:**该方法仅适用于字符串表示的布尔值。 **正确的写法:** ```java zero = Integer.valueOf(0); return Boolean.TRUE; ``` 改进之处: 1. **使用`Integer.valueOf()`:**创建不可变对象,提高效率。 2. **使用`Boolean.TRUE`:**直接返回布尔常量,无需额外计算。 #### 使用XML解析器 **错误的写法:** ```java int start = xml.indexOf("<name>") + "<name>".length(); int end = xml.indexOf("</name>"); String name = xml.substring(start, end); ``` 问题分析: 1. **手动解析XML:**这种方法容易出错且不易维护。 **正确的写法:** ```java SAXBuilder builder = new SAXBuilder(false); Document doc = builder.build(new StringReader(xml)); String name = doc.getRootElement().getChild("name").getText(); ``` 改进之处: 1. **使用`SAXBuilder`解析器:**这是一种更为安全、高效的方法。 #### 使用JDOM组装XML **错误的写法:** ```java String name = ... String attribute = ... String xml = "<root>" + "<name att=\"" + attribute + "\">" + name + "</name>" + "</root>"; ``` 问题分析: 1. **手动构造XML:**这种方法容易引入语法错误。 **正确的写法:** ```java Element root = new Element("root"); root.setAttribute("att", attribute); root.setText(name); Document doc = new Document(); doc.setRootElement(root); XmlOutputter out = new XmlOutputter(Format.getPrettyFormat()); String xml = out.outputString(doc); ``` 改进之处: 1. **使用JDOM构建XML文档:**这种方法结构清晰、易于维护。
剩余23页未读,继续阅读
- 粉丝: 19
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 三菱FX3U 步进电机算FB块 FB块的使用可以使程序模块化简单化,进而提高了程序的稳定性和可移植性 此例中使用FB块,可以实现步进电机的算,已知距离求得脉冲数,已知速度可以求得频率 程序中包含
- 双向隔离DCDC仿真simulink
- 基于PSO粒子群PID控制器参数整定粒子群PID psopid 基于粒子群算法整定PID控制器,实现PID控制器参数的自整定(PSO-PID) matlab编写,源码注释详细具体如图,评价指标详
- 3567954014871001-进程的概念.zip
- 伺服电机、步进电机通用的S曲线及梯形加减速控制源码,十分经典,有中文注释及实现原理说明 系前期从某高手卖家处高价购得(技术源头实为国外专业公司) 本人已经在多个自动化控制系统中采用,为摊低成本故低
- DSP28335的Svpwm处理器在环仿真(matlab simulink)
- cruise模型,增程汽车仿真模型,恒功率控制 关于模型: 1.模型是个base模型,基于cruise simulink联合仿真,主要实现恒功率控制以及电制动优先的能量回收策略,主要供学习使用
- Polarion表结构
- ssm中小型企业财务管理系统+jsp.zip
- ssm珠宝首饰交易平台开发+jsp.zip
- ssm助学贷款+jsp.zip
- ssm职工健康每日申报系统设计+vue.zip
- ssm在线作业管理系统的设计与实现+vue.zip
- ssm中国咖啡文化宣传网站的设计与实现+vue.zip
- FIFO verilogIP 包括深度为1的fifo 包括普通同步FIFO和异步FIFO,均为first word fall through模式,同步fifo三种写法,异步fifo三种写法,可参
- ssm在线医疗服务系统+jsp.zip