本文主要是介绍java学习笔记StringBuffer/StringBuilder及基本数据类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、StringBuffer概述
StringBuffer是字符串缓冲区,是一个容器。(create、update、read、delete)CURD
StringBuffer是线程安全的可变字符序列。可安全的用于多个线程。
面盆理论:添加多少东西,盆还是一个盆。其本身对象不变。
字符串缓冲区(StringBuffer)的特点:
1、长度是可变化的。
2、可以直接操作多个数据类型。
StringBuffer sb = new StringBuffer(); sb.append(“abc”).append(true).append(34);
3、最终会通过toString方法变成字符串。
StringBuffer应用情况:
当数据类型不确定的时候,而且最终要变成字符串,而且数据的个数也不确定的时候用StringBuffer最方便。
二、StringBuffer方法应用
1、存储:
StringBufferappend():将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index,数据):将指定数据作为参数添加到已有数据结尾处
2、删除
StringBufferdelete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。3、获取
char charAt(int index):获取字符
int indexOf(String str):获取字符位置
int lastIndexOf(String str):获取指定
int length():获取长度
String substring(int start,int end):获取指定位置间的子串,返回String不是StringBuffer。
4、修改(替换/改变在原有基础上)
StringBufferreplace(start,end,string):
void setCharAt(int index,char ch):
5、反转
StringBuffer reverse(); 返回的还是一个StringBuffer。
6、转换数组
void getChars(int srcBegin,int SrcEnd,char[] dst,int dstBegin):同toArrar()差不多。不包含尾。
将StringBuffer中的指定位置间的内容变为一个字符数组。并指定字符数组的开始角标。
三、StringBuilder
JDK1.5 版本之后出现了StringBuilder不保证同步且不安全。该类被用作StringBuffer的一个简易替换。因为快。
为什么不用安全的StringBuffer了呢?(StringBuffer和StringBuilder区别)
因为并发执行会产生数据混乱。如果是单线程程序,StringBuffer效率低,因为添加删除都要判断锁,而StringBuilder不需要判断锁。多线程时可以用StringBuffer也可以用StringBuilder自己添加锁用Lock对象的lock和unlock。
开发建议使用StringBuilder。
StringBuffer是线程同步比较安全但判断锁(一次只能有一个执行即为同步,并发操作会出错)
StringBuilder是线程不同步。 多线程时需要同步用StringBuffer单线程用StringBuilder。
使用时只要将StringBuffer替换为StringBuilder即可,方法都是一样的。
四、应用示例
class StringBufferDemo
{
public static void main(String[] args) // 主函数
{
method_del();
}
public static void method_update()
{
StringBuffersb = new StringBuffer(“abcde”); // 定义一个StringBuffer对象
sb.replace(1,4,”java”); // 替换一部分
sb.setCharAt(2,’k’); //替换2角标上的数据替换成k,此方法用于替换一个字符
sop(sb.toString());
}
public static void method_del() // 删除方法
{
StringBuffer sb =new StringBuffer(“abcde”); // 定义一个StringBuffer对象
sb.delete(1,3); // 删除第二个和第三个
sop(sb.toString()); // 输出查看
sb.deleteCharAt(2); // 删除第二个(其实就是调用参数为2,3)删除一个时用
sb = new StringBuffer(); // 清空缓冲区重新开一个缓冲区,比较败家连盆都扔了
sb.delete(0,sb.length()); // 清空缓冲区正确做法。
}
public static void method_add() // 存储方法
{
StringBuffer sb =new StringBuffer(); // 定义一个StringBuffer对象
//StringBuffer sb1 = sb.append(34);
// sop(“sb==sb1:”+(sb==sb1)); // 证明面盆理论
sb.append(“abc”).append(“true”). append(“34”); // 结果为34
sb.insert(1,”qq”); // 指定位置插入,角标超出不会有结果
sop(sb1.toString()); // 调用方法输出结果
}
publicstatic void sop(String str) // 定义方法用于输出
{
System.out.println(str);
}
}
JDK1.5版本以后出现的基本数据类型对象包装类的新特性
基本数据类型对象包装类
byteByte short Short int Integer long Long
boolean Boolean float Float double Double char Character
基本数据类型对象包装类最常见作用就是用于基本数据类型和字符串类型之间做转换。
基本数据类型转成字符串。
eg:基本数据类型+””
基本数据类型.toString(基本数据类型值) 如:Integer.toString(34); // 将34整数变成”34”;
字符串转成基本数据类型。
eg:基本数据类型包装类(xxx).parse(xxx)(String); // 静态调用方式
intnum = Integer.parseInt(“123”); boolean b = Boolean.parseBoolean(“true”);
Integer i = new Integer(“123”); // 次方法是非静态的即对象调用方式
int num = i.intValue();
注:必须传入数字格式的字符串。
十进制转成其他进制。
(Integer.)toBinaryString(); (Integer.)toHexString(); (Integer.)toOctalString();
其他进制转成十进制。
parseInt(string,radix); eg:int x = Integer.parseInt(“3c”,16);
classIntegerDemo
{
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{ //
sop(“int max:”+Integer.MAX_VALUE);
//将一个字符串转成整数
int num = Integer.parseInt(“123”);
sop(“num=”+(num+4));
int x = Integer.parseInt(“110”,10);
sop(“x=”+x);
}
}
Integerx = new Integer(4); → Integer x = 4; // 简化书写新特性自动装箱,4(null)是一个对象
x= x +2; // 直接运算对象+整数,x进行了自动拆箱变成了int类型和2进行加法运算在将和进行装箱赋给x。
Integerm = 128; Integer n =128; sop(“m==n”+(m==n)); // 结果为false
Integera = 127; Integer b =127; sop(“a==b”+(a==b)); // 结果为true
注:结果为true,因为a和b指向了同一个Integer对象。
因为当数值在byte范围内,对于新特性,如果该数值已经存在,则不会在开辟新空间。
这篇关于java学习笔记StringBuffer/StringBuilder及基本数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!