字符串
来源:互联网 发布:打开数据漫游会收费没 编辑:程序博客网 时间:2024/05/21 10:22
String类
该类一旦产生一个字符串,其对象就不可变。
- String类使用private final char value[]来实现字符串的存储,也就是说,String对象创建够,就不能再改变此对象中存储的字符串内容。
String类有一个特殊的创建方法,就是使用”“双引号来创建,例如new String(“jinder”)实际创建了2个String对象。一个是”jinder”通过”“创建的。另一个是通过new创建的。只不过他们创建的时期不同。一个在编译期,一个在运行期。
运行时期,调用String类的intern方法,就可以向String Pool中动态添加对象。
String类的创建方法
- 直接使用”“引号创建
- 使用new String()创建
- 使用new String(“someString”)创建以及其他一些重载构造函数创建
- 使用重载的字符串连接符”+”创建
在Java中使用new关键字会创建一个新的对象。不管在String Pool中是否已经有值相同的对象,都会在heap中创建一个新的对象。
String s1 = new String("777"); String s2 = "aaa777"; Stirng s3 = "aaa" + "777"; String s4 = "aaa" + s1; System.out.println(s2 == s3); //true System.out.println(s2 == s4); //false System.out.println(s2 == s4.intern()); true
line6: 由于s1是变量,在编译期不能确定它的值是多少,所以会在执行的时候创建一个新的String对象存储在heap中,然后赋值给s4.
line7:S4调用intern方法,是s4所引用的对象动态的添加到常量池中。然后与s2比较。因为都在常量池中所以”==”返回true。
StringBuffer
StringBuffer类是字符串缓冲区,跟String类似用来存储字符串数据。如果要修改一个StringBuffer类的字符串,就不需要再穿坚信的字符串对象。StringBuffer类属于java.lang包。
示例:在一下程序中,创建了几个对象?
String A, B, C; A = "a"; B = "b"; A = A + B; StringBuffer D = new StringBuffer("abc"); D = D.append("567");
line2: 创建一个对象”a”和一个引用A;
line3: 创建一个对象”b”和一个引用B;
line4: 创建一个对象,并由原来的A来引用,原来A所指向的对象就会变成垃圾对象,等待回收。
line5: StringBuffer的特点是改变对象本身而不创建新的对象,因此第6行都是对同一个对象进行处理。而字符串对象也是一个对象,固有两个对象。
所以,一共创建了5个对象。
面试题目
一、字符串字面量是否自动生成一个String对象
答案是肯定的,字符串类具有一定的特殊性,JVM在执行双引号操作符的时候,会自动创建一个String对象,并返回这个对象的引用
二、StringBuffer和StringBuilder存在的作用是什么?
在Java程序里,如果需要大量拼接字符串的话,应该使用StringBuffer和StringBuilder类,他们可以避免不必要的String对象的产生,以提高程序的性能。他们功能相似,只不过StringBuilder是线程安全的。
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 字符串
- 实例说明RPC的使用
- [leetcode] 235.Lowest Common Ancestor of a Binary Search Tree
- 四种方案解决ScrollView嵌套ListView问题
- Android Studio 设置编码
- C语言中函数
- 字符串
- 缘来由天——我在武汉理工大的两年
- 1603 - Square Destroyer
- 黑马程序员 集合类
- 编译器错误消息: CS0006: 未能找到元数据文件
- Palindrome Linked List
- 杭电 hdu 1033 (水题) 但英文特难,题意很难理解
- JS高级程序设计4-变量、作用域、和内存的问题
- Hibernate(一)文件配置、表结构的生成、默认与c3p0连接池的配置