Java小白踩坑录 - 字符 & 字符串(一)

简介: Java小白踩坑录 - 字符 & 字符串(一)

Java 中的大头儿子和小头爸爸


image.png


Java 中也有一对冤家对头,它们就是字符串 String 和字符 char 。来看看它们的表现吧


System.out.println("h"+"i");
System.out.println('h'+'i');

会打印出什么呢?结果可能出乎你的意料:


hi
209

为什么会出现 209 这个结果呢?


编译器在计算常量表达式 ‘h’+‘i’ 时,是通过我们熟知的拓宽原始类型转换,将两个具有字符型数值的操作数(‘h’和’i’)提升为 int 数值而实现的。从 char 到 int 的拓宽原始类型转换,是将 16 位的 char 数值零扩展到 32 位的 int。对于’h’,char 数值是 104,而对于’i’,char 数值是 105,因此表达式 ‘h’+‘i’ 等价于 int 常量 104 + 105,或 209。


有三种方式避免出现 char 的连接问题。第一种最简单:



System.out.println("" + 'h' + 'i');

第二种:使用函数:

System.out.printf("%c%c", 'h', 'i');

或者:

System.out.println(String.format("%c%c", 'h','i'));

第三种,利用 API 拼装:

StringBuffer sb = new StringBuffer();
sb.append('h');
sb.append('i');
System.out.println(sb);

也许你会认为这比较简单,那我们就见识一个比较复杂点的吧!


private static Random rnd = new Random();
  public static void main(String[] args) {
    StringBuffer word = null;
    switch(rnd.nextInt(2)) {
      case 1: word = new StringBuffer('P');
      case 2: word = new StringBuffer('G');
      default: word = new StringBuffer('M');
  }
  word.append('a');
  word.append('i');
  word.append('n');
  System.out.println(word);
}   
目录
相关文章
|
2月前
|
SQL JSON Java
告别拼接噩梦:Java文本块让多行字符串更优雅
告别拼接噩梦:Java文本块让多行字符串更优雅
345 82
|
2月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
182 14
|
6月前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
151 17
|
6月前
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
137 13
|
6月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
171 15
|
10月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
242 83
|
10月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
169 60
|
10月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
170 26
|
10月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
282 8

热门文章

最新文章