摘要:
笔者近期在学习Java字符串这一部分的时候,Get到了一些比较新奇的点,准确的说,是和Python相比较而言的,因为笔者第一语言接触的是C和C++,而后便是Python,目前来说较为熟悉的就是这个Python了。所以,在学习Java的时候,会不自觉地联想到之前学过的语言在这一块的用法,而后在小脑袋里简单的对比一下,本篇文章就是对于字符串这一部分的一个小结,不准确的地方还望读者批评指正。
(一)单引号与双引号情结
在学Java字符串这一部分的时候,遇到的第一个比较有意思的就是单双引号的问题。比如下面这串代码,就会报出错误。
String str = 'hello';
System.out.println(str);
如果将上述代码的单引号改为双引号,就正确了。这个现象确实比较有意思,因为在Python里,单双引号都可以包字符串,可能是因为这门语言本就是弱类型语言的缘故,用起来也是贼方便,不用声明类型,即定义即用。但是,现在是Java,现在这种情况原因究竟何在?查了一下,全明白了,简单总结起来就两句话:
- 单引号的数据,属于char类型,单引号只能引一个字符(表示单个字符);
- 双引号的数据,属于String类型,双引号可以引任意数量字符的字符串(包括0个和1个字符的字符串)
原来Java对于引号还有这么严格的要求,个人感觉,有利有弊吧,一方面使用起来稍微麻烦了些,将字符型和字符串型区分开,意味着有一批的方法二者不能共用(见下方代码),对于编程人员来说,需要费点脑力;另一方面,更精确的定义一般意味着实现更精细的需求,其功能和性能在某种程度上肯定要占优不少。
//对于单引号char类型的大小写转换
System.out.println(Character.toUpperCase('n'));
//对于双引号String类型的大小写转换
System.out.println("hello".toUpperCase());
(二)Java String Buffer与Python Array
在需要对字符串进行修改的时候,就需要用到Java String Buffer和Java String Builder类。两者各有千秋,后者在速度上占据优势,但不是线程安全的;而前者是线程安全的,也就是可以被同步访问。由于现在的机器在计算性能上的表现是比较令人满意的,综合同步性和速度,最终Java String Buffer更胜一筹,目前使用较为广泛。
这两个类实现了一个什么功能呢?很简单,就是可以对原字符串进行修改,这一点是非常方便且非常重要的。具体的使用方法和效果,我们还是贴出代码吧,比较直观。
StringBuffer sBuffer = new StringBuffer("hello");
System.out.println(sBuffer.reverse()); //此处输出:olleh
sBuffer.append(" world.");
System.out.println(sBuffer); //String Buffer会改变原字符串变量的内容,此处输出:olleh world.
sBuffer.replace(0, 5, "hello");
System.out.println(sBuffer); //注意,替换字符串的时候,位置是左闭右开的,此处输出:hello world.
看到这个append,笔者又不自觉地联想到了Python中Array的用法(见下方代码)。
### 代码基于Python3
arr = []
print(arr) # 此处输出:[]
arr.append("hello")
arr.append("world")
print(arr) # 此处输出:['hello', 'world']
小结:
其实,会用这个,对学习Java String Buffer有着不小的帮助,因为在Python中,Array的append方法也是改变了原数组的内容,这一点和Java有着异曲同工之妙。虽然一个是对字符串,一个是对数组,但并不影响两种语言在思想上的连通性。
小编目前只是博客新人,在校生一名,如果读者对小编写的还比较满意,欢迎关注支持啊!
如果有什么问题,也可以加小编的QQ进行交流,不过,记得在备注里介绍自己哦。(QQ:1329924827)