java 之 字符串
2016-05-26 10:17
190 查看
1. 不可变字符串,String对象本质上是不可变得,而String类中的修改字符串方法,都是在原有字符串加上修改的内容创建一个新的字符串,原有的可以说是丝毫未动
public class Immutable {
public static String upcase(String s){
return s.toUpperCase();
}
/**
* <b>方法说明:</b>
* <ul>
*
* </ul>
* @param args
*/
public static void main(String[] args) {
String m = "dsf";
System.out.println(m);
String qq = upcase(m);
System.out.println(qq);
System.out.println(m);
}
}
// console
dsf
DSF
dsf
就像上面的例子一样,把m传递给upcase()方法时,实际上传递的是一个引用的拷贝,(就是每次把Stirng对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直呆在单一的物理位置上)
2. 重载“+” 和 StringBuilder
String对象是不可以变得,可以为其加上任意多的别名,因为String对象具有只读特性,所以只向它的引用都不可能改变它的值。
不可变性会带来一定的效率问题,例如为String对象重载的"+"操作符就一个例子(重载:一个操作符在应用于特定的类时,被赋予了特殊的意义(+,+=是java仅有的两个重载过的操作符))
操作符“+”可用来连接String:
StringBuilder提供了全面丰富的方法,包括insert()、repleace()、substring()、reverse()、append() 等。这是jdk5引入的,之前使用的是StringBuffer,后者是线程安全的因此开销也会大一些;
由于以前的字符串拼接 StringBuilder.append() 方式比两个字符串直接相加的速度要快,后来 java 进行了升级改进,现在字符串直接相加的速度优于 append 方式,并且字符串相加的代码可读性更强,所以要求将所有 append 方法进行拼接的都改为字符串相加方式。
例如:
StringBuilder str = new StringBuilder();
str.append("王强").append("你好");
应改为:
String str = "";
str += "王强" + "你好";
public class Immutable {
public static String upcase(String s){
return s.toUpperCase();
}
/**
* <b>方法说明:</b>
* <ul>
*
* </ul>
* @param args
*/
public static void main(String[] args) {
String m = "dsf";
System.out.println(m);
String qq = upcase(m);
System.out.println(qq);
System.out.println(m);
}
}
// console
dsf
DSF
dsf
就像上面的例子一样,把m传递给upcase()方法时,实际上传递的是一个引用的拷贝,(就是每次把Stirng对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直呆在单一的物理位置上)
2. 重载“+” 和 StringBuilder
String对象是不可以变得,可以为其加上任意多的别名,因为String对象具有只读特性,所以只向它的引用都不可能改变它的值。
不可变性会带来一定的效率问题,例如为String对象重载的"+"操作符就一个例子(重载:一个操作符在应用于特定的类时,被赋予了特殊的意义(+,+=是java仅有的两个重载过的操作符))
操作符“+”可用来连接String:
StringBuilder提供了全面丰富的方法,包括insert()、repleace()、substring()、reverse()、append() 等。这是jdk5引入的,之前使用的是StringBuffer,后者是线程安全的因此开销也会大一些;
由于以前的字符串拼接 StringBuilder.append() 方式比两个字符串直接相加的速度要快,后来 java 进行了升级改进,现在字符串直接相加的速度优于 append 方式,并且字符串相加的代码可读性更强,所以要求将所有 append 方法进行拼接的都改为字符串相加方式。
例如:
StringBuilder str = new StringBuilder();
str.append("王强").append("你好");
应改为:
String str = "";
str += "王强" + "你好";
相关文章推荐
- eclipse 中.classpath和.project和.settings的作用
- Eclipse中添加Android系统jar包
- java was started but returned exit code=13
- JavaWEB之Filter的应用场景(2)
- java中的类(class),包(package),接口(interface)
- Axis1.4 创建webservice服务 ----嵌套在SpringMvc框架中
- eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
- 源码学习之ArrayList
- java异常基础入门笔记
- Spring mvc 技术积累
- java 环境变量java_home配置多加了 \ 导致zookeeper莫名其妙问题。
- java File操作实例
- Spring MVC @Transactional注解方式事务失效的解决办法
- Java_动态重新加载Class总结
- 关于华为smproxy_smgp.jar包的Cfg加载InfoX配置信息报java.net.MalformedURLException: no protocol:
- java基本数据类型
- SpringMVC设计思路
- spring mvc加载css,js等有关文件
- eclipse 配置hibernate自动生成工具
- Spring4.x新特性