Lang:简体中文

java字符串面试题

日期:2025-09-08 / 来源:面试宝典

深入解析java字符串面试要点

在java面试中,字符串相关的问题是常见考点,下面为大家详细介绍几类典型的java字符串面试题。

字符串创建方式问题

java中创建字符串有两种常见方式,一是使用字符串字面量,二是使用new关键字。比如,使用字符串字面量创建:string str1 = "hello"; 使用new关键字创建:string str2 = new string("hello"); 这两种方式有本质区别。使用字符串字面量创建时,jvm会先检查字符串常量池中是否已经存在该字符串,如果存在则直接引用,不存在则创建新的字符串对象放入常量池。而使用new关键字创建时,无论常量池中是否存在该字符串,都会在堆内存中创建一个新的对象。例如:

string a = "test"; string b = "test"; system.out.println(a == b); // 输出true,因为a和b引用常量池中的同一对象

string c = new string("test"); string d = new string("test"); system.out.println(c == d); // 输出false,因为c和d是堆内存中的不同对象

字符串拼接问题

字符串拼接也是常考内容。在java中,有多种拼接字符串的方式,如使用+运算符、stringbuilder和stringbuffer。使用+运算符拼接字符串时,在编译时会将其转换为stringbuilder的append方法。例如:

string s1 = "hello"; string s2 = "world"; string s3 = s1 + s2; 实际上编译后类似于:stringbuilder sb = new stringbuilder(); sb.append(s1); sb.append(s2); string s3 = sb.tostring();

而stringbuilder和stringbuffer都有append方法用于拼接字符串,不同的是stringbuffer是线程安全的,因为它的方法都加了synchronized关键字,而stringbuilder是非线程安全的,但性能更高。在单线程环境下,推荐使用stringbuilder进行字符串拼接。

字符串比较问题

比较字符串时,很多人容易混淆==和equals方法。==比较的是两个字符串对象的引用是否相同,即是否指向同一个内存地址;而equals方法比较的是两个字符串的内容是否相同。例如:

string stra = new string("java"); string strb = new string("java"); system.out.println(stra == strb); // 输出false,因为引用不同

system.out.println(stra.equals(strb)); // 输出true,因为内容相同

字符串不可变性问题

java中的string类是不可变的,即一旦创建,其内容不能被修改。当对字符串进行修改操作时,实际上是创建了一个新的字符串对象。例如:

string original = "abc"; string modified = original + "d"; 这里original的值并没有改变,只是创建了一个新的字符串对象modified。这种不可变性使得字符串在多线程环境下是安全的,并且可以作为hashmap等集合的键。

字符串转换问题

在实际开发中,经常需要进行字符串与其他数据类型的转换。比如,将字符串转换为整数可以使用integer.parseint方法,将整数转换为字符串可以使用string.valueof方法。例如:

string numstr = "123"; int num = integer.parseint(numstr); system.out.println(num); // 输出123

int number = 456; string strnum = string.valueof(number); system.out.println(strnum); // 输出456

以下为推荐内容

微信二维码