Java代码优化之字符串String学习

在Java开发中,字符串使用的非常频繁,在内存中占据的比例相当高,JDK的设计大拿们早就意识到这点,对其进行了大量的优化。
一、认识String
String并非基本数据类型,却是最重要的引用数据类型,可以认为是对char数组的封装,提供许多有效的操作字符数组的方法。
查看String源码(JDK1.6)可以发现,String类主要由三部分组成:char数组、偏移量和String的长度。
`private static final class CaseInsensitiveComparator implements
Comparator, Serializable {
// 内容
private final char[] value;
// 偏移量
private final int offset;
// 长度
private final int count;

/**
* Creates an empty string.
*/
public String() {
value = EmptyArray.CHAR;
offset = 0;
count = 0;
}
}`

String对象的真实内容是由这三部分共同决定的,这就意味字符数组存储的字符并非全都有效,除了被offset和count截取部分,其余的空间就浪费了,其实这是设计上的一种以空间换时间的策略,以此来提高String对象的创建效率。

二、String对象的三个基本特点
a.不变性
b.针对常量池的优化
c.类的final定义
1.不变性
不变性是指String对象一旦生成,就不能再对它进行改变,其实质是不能改变该对象的内部状态,即成员变量的值,基于两点可以说String对象是不变的:1.没有提供set方法来改变这些成员变量;2.String类提供的处理方法都会创建一个新的对象,如replace(),substring(),原有的对象依然不变。这也是不变模式的典型应用。当然通过反射技术还是可以改变String的值。
那么为什么要将String对象设计成不变的呢?原因有三点:
1)字符串池(String pool)的需求 在Java中,当初始化一个字符串变量时,如果字符串已经存在,就不会创建一个新的字符串变量,而是返回存在字符串的引用。 例如: String string1=”abcd”; String string2=”abcd”; 这两行代码在堆中只会创建一个字符串对象。如果字符串是可变的,改变一个字符串变量,就会使另一个字符串变量指向错误的值。
2)缓存字符串hashcode码的需要 字符串的hashcode是经常被使用的,字符串的不变性确保了hashcode的值一直是一样的,在需要hashcode时,就不需要每次都计算,这样会很高效。
3)出于安全性考虑 字符串经常作为网络连接、数据库连接等参数,不可变就可以保证连接的安全性。

2.针对常量池的优化
当两个String对象拥有相同的值时,它们只引用常量池中的同一个拷贝。当同一个字符串反复使用时,这个技术可以大幅度节省内存空间。
public class StringDemo {

/**
 * @param args
 */
public static void main(String[] args) {
    String str1 = "abc";
    String str2 = "abc";
    String str3 = new String("abc");
    System.out.println(str1==str2);    // true
    System.out.println(str1==str3);    // false
    System.out.println(str1==str3.intern());  // true
}

}
这里写图片描述

三、类的final定义
作为final类,意味着String类不能有任何子类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 字符串拼接是指将多个字符串连接起来形成一个新的字符串。在Java中,可以使用“+”运算符来实现字符串拼接。例如: String str1 = "Hello"; String str2 = "World"; String str3 = str1 + " " + str2; 上述代码中,首先定义了两个字符串变量str1和str2,然后使用“+”运算符将它们拼接起来,并将结果赋值给一个新的字符串变量str3。最终,str3的值为“Hello World”。 需要注意的是,字符串拼接操作会创建新的字符串对象,因此在频繁进行字符串拼接操作时,应该尽量避免创建过多的临时对象,以提高程序的性能。可以使用StringBuilder或StringBuffer类来优化字符串拼接操作。 ### 回答2: Java字符串是指在Java程序中用来表示文本的一组字符。Java语言中所有的字符串都是由String类来表示,因此在学习Java字符串的使用时,我们需要了解String类的相关知识。 Java字符串的拼接指将多个字符串连接在一起,形成一个新的字符串Java提供了多种方式来实现字符串的拼接,比如使用+运算符、使用concat()方法、使用StringBuilder等。在这些实现方式中,使用+运算符是最常用的方式之一,也是最简便的方式之一。 Java中的+运算符可以用来连接两个字符串,例如: ``` String str1 = "Hello"; String str2 = "World"; String str3 = str1 + str2; System.out.println(str3); ``` 在上述代码中,我们将字符串"Hello"和"World"连接在一起,最终结果是一个新的字符串"HelloWorld"。 需要注意的是,当Java程序使用+运算符连接两个字符串时,实际上会创建一个新的字符串对象,这些字符串对象的创建和销毁可能会对Java程序的性能造成影响。 如果我们需要在循环中拼接多个字符串,建议使用StringBuilder类来实现,因为StringBuilder提供了更高效的字符串拼接方式。 总的来说,掌握Java字符串的拼接技巧对于Java程序员来说是非常重要的。在实际开发中,经常需要将多个字符串连接在一起,比如拼接SQL语句、拼接HTML代码等。因此,学会使用字符串拼接技巧能够让程序员更高效地完成编码工作。 ### 回答3: Java字符串Java语言中的一种基本数据类型,可以通过Java中的string类进行操作。string类是一个非常重要的类,在Java字符串操作中拥有极其重要的地位。在Java中,字符串的拼接方式有很多种,其中最常用的就是字符串的“+”运算符。 在java中,字符串拼接可以使用string类提供的concat()方法,也可以使用”+”运算符对字符串进行拼接。当使用”+”运算符进行字符串拼接时,我们需要注意到一些细节问题: 1.字符串+基本类型或其他对象,编译器会自动将基本类型或其他对象转换为字符串,然后再进行拼接。 2.字符串+null,会返回字符串”null”; 3.字符串的拼接过程会生成新的字符串对象,原有的字符串对象不会被修改。 4.字符串的“+”运算符是从左到右的结合性,如果需要改变运算的顺序,需要使用括号改变运算优先级。 除了上面提到的字符串拼接方式,Java还提供了一种字符串格式化输出的方式:String.format()方法。该方法可以很好地控制输出的格式,提高代码的可读性和可维护性。它使用了类似于C语言中的printf()函数的用法,可以在输出的字符串中插入占位符,并通过占位符来控制输出的格式。示例如下: String str = String.format("我的名字叫%s,今年%d岁。","小明", 20); 使用String.format()方法可以减少代码的冗余度,提高代码的可读性和可维护性。 总之,在Java中,字符串的拼接和格式化输出是非常常见和重要的操作。在理解和掌握了相关知识后,可以大大提高Java程序的开发效率和代码的优雅程度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值