字符和字符串的区别有哪些
说到字符和字符串,很多小伙伴容易糊涂,别急,我来给你掰扯掰扯。简单来说:
-
定义差异:字符其实就是一个单独的符号,比如字母A、数字5,或者感叹号!,它一般用单引号包起来,比如
'A'。而字符串呢,就是由一个或多个字符组成的一串东西,必须用双引号包着,比如"hello"、"123"。 -
表示方式:在编程里,字符用单引号括起来,字符串用双引号。打印字符的时候你得用
%c占位符,而打印字符串要用%s。咱们说,字符就是“一块儿小砖头”,而字符串是“砌成的一堵墙”。 -
内存占用:字符一般是占用一个字节,字符串则是占用多个字节的连续空间,因为它是由多个字符拼成的序列。
也就是说,字符是基本数据类型,单个符号;字符串是复合类型,一串字符组合。简单又直观,不是吗?

String、StringBuffer和StringBuilder它们的区别和特点怎么理解
在Java里处理字符串,你肯定碰到过这三位大佬:String,StringBuffer,还有StringBuilder。它们看似相似,实际上各有不同,咱们慢慢说说:
-
String的不可变性
String一旦创建,内容就不能改了。如果你想改,比如拼接字符或者替换内容,Java会帮你造新的对象,老对象依旧保持不变。它底层是用char[]数组实现的,数组长度固定,改内容就得重新分配内存。适合用在字符串内容不经常变化的场合,比如常量字符串。 -
StringBuffer的线程安全
StringBuffer是线程安全的,也就是说它内部用同步机制锁住修改操作,适合多线程环境下用。但因为加了锁,自然性能会稍逊一筹。比如多个线程同时操作字符串时,选它准没错。 -
StringBuilder的高性能
相比StringBuffer,StringBuilder没有线程安全机制,所以在单线程或者不涉及多线程的场景里,它的性能杠杠的,执行快得多。
总结一下你得知道的:
- 你写的代码单线程处理字符串,改内容频繁,选StringBuilder,快且省力。
- 你项目多线程,字符串又要修改,选StringBuffer,安全靠谱。
- 字符串固定不变,平时用得最多的还是String。
顺带说个小tips,String虽然创建对象多了点内存占用,但它的不可变特点让程序更安全,也更易于缓存和哈希用。

相关问题解答
-
字符和字符串到底有什么不同吗?
说白了,字符就是单个符号,比如'a'、'5',而字符串就是一堆字符连起来,比如"abc"、"123"。打个比方,字符是积木的一块,而字符串就是拿这些积木拼出的房子。两者在代码中表现不同,字符用单引号,字符串用双引号,这点小伙伴们得搞清楚。 -
为什么String在修改时会生成新对象呢?
嘿,这事儿挺有意思。String设计成不可变对象,是为了保证它安全又稳定。每次修改时,比如拼接一个字符,Java都会重新造个新对象。虽然多了点内存负担,但好处是一点非预期改动都不会发生,线程安全又方便你用缓存,挺划算的! -
什么时候该用StringBuffer,什么时候用StringBuilder?
这主要看你程序的运行环境。你要是写单线程代码,改字符串又多,StringBuilder简直就是首选,因为它速度快又轻巧。反之,如果代码会被多个线程同时调用,必须用StringBuffer,因为它天生帮你把线程安全护得严严实实。 -
StringBuffer和StringBuilder各自的优缺点是什么?
说白了,StringBuffer的优势是线程安全,缺点是操作稍慢,因为每次都要排队“开锁”。而StringBuilder则没有锁,所以速度快,适合单线程,但一旦多线程使用就容易出错。总之,两者像两把刀,一把锋利速度快,一把安全靠谱,各有千秋。
发布评论