首页 技术 正文
技术 2022年11月11日
0 收藏 699 点赞 2,314 浏览 1739 个字

String

  String的构造方式有n种(据说n==11),常见的例举一二:

String s1 = "hello world";String s2 = new String("hello world");char[] a = {'h', 'e', 'l', 'l', 'o'};String s3 = new String(a, 1, 3);  // start length String s4 = "hello world";String s5 = new String(s4);  // cloneString s6 = s4; // reference

  String类常用方法:

String s = "hello world";// toArraychar[] a = s.toCharArray();// charAtchar b = s.charAt(0);// get lengthint len = s.length();// compareint c = s.compareTo("hello");  // 返回字符差boolean f = s.equals("hello");boolean g = s == "hello"; // 地址层面的比较// move blankString h = s.trim();// cut and addString d = s.concat(" i love you"); // hello world i love youString j = s + " i love you";String e = s.substring(1, 3); //out el startIndex endIndex
// int(or other types) -> Stringint a = 100;String s = String.valueOf(a);

StringBuffer & StringBuilder

  因为String对象是不可变的,每次操作都会生成一个新的String对象,所以如果要修改字符串,就要用StringBuffer和StringBuilder。

StringBuffer s = new StringBuffer("hello world");// deletes.delete(0, 6); // world start end// reverses.reverse();  // dlrow// appends.append(" world"); // dlrow world// inserts.insert(0, 100); // 100dlrow world// replaces.replace(0, 3, "hello"); // hellodlrow world// setCharAts.setCharAt(0, 'd');  // dellodlrow world// String <-> StringBufferString a = s.toString();StringBuffer b = new StringBuffer(a);

高级比较

  String和StringBuffer以及StringBuilder最主要的区别当然不是能不能修改那么简单。

  既然已经有了String类,为什么还要StringBuffer和StringBuilder?

  String是字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。如果查看java的源代码(即java安装目录的src.zip文件),就会发现它和StringBuilder类的方法的区别就是,在每个方法前面添加了”synchronized”,保证其是线程安全的。StringBuilder 字符串可变量,是线程不安全的。在java API中指明:这个类是在JDK 5才开始加入的,是StringBuffer的单线程等价类。(其他两个String和StringBuffer类,都是JDK 1.0开始)

  多线程的情况下才需要考虑线程安全问题。比如一个 StringBuilder ,可能被多个线程访问,那么如果没有 synchronized 的话,第一个线程改变了其值,之后又有第二个线程改变了它的值。当切换回第一个线程时,读到的就是第二个线程修改后的值了。 如果不考虑多线程,StringBuilder 比StringBuffer要快。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,892