您的位置:首页 > 职场人生

黑马程序员——43,String,StringBuffer ,基本数据类型包装对象

2015-09-02 22:06 786 查看
----------- android培训java培训、java学习型技术博客、期待与您交流!------------

黑马程序员——43,String,StringBuffer ,基本数据类型包装对象
一:String----》

String是字符串类,建立对象时候一般都是直接指定,例如,String s=”哈哈,haha”;正因为String是一个类,所以,字符串”哈哈,haha”是一个对象!这就衍生出一个特点:字符串在内存中,一旦被初始化就不能被修改了。

String s1=”hjk”;

String s2=”hjk”;

其中s1和s2应用变量指向的是同一个对象!

String s3=new String(“hjk”);//这样也可以建立String类的对象,不过注意的是这句话中有两个对象,一个是”hjk”,另外一个是new String()

在java中==往往是用来比较基本数据类型的大小或者对象是否是同一个。

而equals方法原本是定义在Object类中的用来比较地址值,但是,String类中却将其覆盖了,对于String来说,equals方法是用来比较字符串内容是否相等的。

另外String还有一些常用的方法(与正则表达式相关的方法这里不列出,后面介绍正则表达式会说道的):

public   char   charAt(int   index)   //返回第index位的字符

public   int     compareTo(String   anotherString) //按照字典顺序与指定字符串做逐位比较

public   int     indexOf(String   str)  //返回指定子字符串第一次在字符串中出现的位置,没有的话返回-1

public   int    indexOf(String  str, int  fromIndex)//从指定位置开始搜索,返回子字符串在字符串中第一次出现的位置

public   boolean   equalsIgnoreCase(String   anotherString)//忽略大小写,比较字符串内容是否相等

public   boolean   equals(Object   anObject)//通常是和指定字符串比较内容是否相等

public   int   lastIndexOf(String   str)//反向搜索指定子字符串第一次出现的位置

public  int  lastIndexOf(String  str, int  fromIndex)//从fromIndex位开始反向搜索子字符串第一次出现的位置

public   int   length()//返回字符串长度

public   boolean    isEmpty()/判断是否为空,当且仅当长度为0时返回true,注意在字符串中空格也是有意义的,其长度不为0

public   boolean   startsWith(String   prefix)//判断是否是以指定子字符串开始

public   boolean    endsWith(String   suffix)//判断是否是以指定子字符结束

public   int    hashCode()//返回字符串哈希值

public   boolean   contains(CharSequence s)    //判断是否含有指定字符或者字符串

public  String   substring(int   beginIndex)//获取指定位到末尾的子字符串,注意这是获取不是切割

public   String   substring(int  beginIndex,int  endIndex)//获取从beginIndex位到endInedx-1位的子字符串

public   String   toLowerCase()//把字符串转成小写再返回

public  String   toUpperCase()//把字符串转成大写再返回

public   String   trim()//切除前后端的空白再返回字符串

public   byte[]   getBytes()//转成对应的字节数组再返回


以下是字符串构造函数和数组转成字符串的一些小知识点:

class  Zifuchuan4
{
public  static   void  main(String[] args) //主函数
{
char[] a={'y','i','e','r','s','a','n','s','i','w','u','l','i','o','u'};  //这是一个字符数组,里面装着一堆的字符

byte[]  b={2,25,46,85,76,95};//这是字节数组
String  c="qibajioushi";
String  d="25648612";

//用String类中的构造函数把字符数组转成字符串:
String  stra=new   String(a);
//把字符数组a里面的一堆字符按照顺序串成字符串"yiersansiwuliou",并且用引用型变量stra指向该字符串
soc(stra);//打印的是"yiersansiwuliou"
String   stra2=new  String(a,3,9);
//把字符数组a中的角标3开始的字符按顺序串成字符串,该字符串的长度是9,然后并且用引用型变量strb指向该字符串
soc(stra2);//打印的是"rsansiwul"

//将字节数组转化成字符串:
soc(new  String(b));//注意:打印的不是数字组成的字符串,而是对应编码表的符号!!!
soc(new  String(b,2,4));//注意:打印的不是数字组成的字符串,而是对应编码表的符号!!!
//对应编码表可以自定义

//用String类中的静态方法把字符数组转成字符串:
soc(String.valueOf(a));//"yiersansiwuliou"
soc(String.copyValueOf(a));//"yiersansiwuliou"
soc(String.copyValueOf(a,3,9));//"rsansiwul"
//也可以放数字进去
soc(String.valueOf(12));//12
soc(String.valueOf(15.4));//15.4
//soc(String.copyValueOf(b,2,4));//这句话编译不通过

//toCharArray方法把字符串转变成字符数组
char[]   shuzhuc=c.toCharArray();//把字符串c转变成一堆字符数组
for(int x=0;x<shuzhuc.length;x++)
{

soc("shuzhuc="+shuzhuc[x]);//逐个打印字符数组shuzhuc
}

byte[]   shuzhud=d.getBytes();

for(int x=0;x<shuzhud.length;x++)
{

soc("shuzhud="+shuzhud[x]);//逐个打印字符数组shuzhud
}

}
public  static   void  soc(Object  obj)//soc打印方法
{
System.out.println(obj );
}

}
/*
以上代码编译运行结果如下:
yiersansiwuliou
rsansiwul
[1].UL_
.UL_
yiersansiwuliou
yiersansiwuliou
rsansiwul
12
15.4
shuzhuc=q
shuzhuc=i
shuzhuc=b
shuzhuc=a
shuzhuc=j
shuzhuc=i
shuzhuc=o
shuzhuc=u
shuzhuc=s
shuzhuc=h
shuzhuc=i
shuzhud=50
shuzhud=53
shuzhud=54
shuzhud=52
shuzhud=56
shuzhud=54
shuzhud=49
shuzhud=50
*/


二:StringBuffer----》

字符串缓冲区StringBuffer,相当于一个容器,长度可以变化,用来装字符串的,线程同步。

后面jdk1.5版本出现的StringBuilder在功能上和前者一样,只不过是线程不同步的。

版本升级的原因:提高安全性,提高效率,简化书写。

常用的构造函数是:

public    StringBuffer()//建立不带参数的字符串缓冲区,初始容量16个字符

public    StringBuffer(int   capacity)//建立指定初始容器的字符串缓冲区

public    StringBuffer(String   str)//建立字符串缓冲区,并把指定字符串放进去


相关常用方法用介绍(soc是打印方法):

StringBuffer  a=new   StringBuffer();//StringBuffer是一个容器,长度可以变化
StringBuffer  a2=  a.append(26);//把26添加进去容器里面再返回容器
//判断a与a2是否是同一个对象
soc("a==a2---"+(a==a2));//a==a2---true
//可以往里面添加的东西可以有不同类型的
a.append("卡卡").append(false).append(10);//形成调用链
//都是以字符串的形式打印
soc(a);//26卡卡false10


简单理解就是append方法其实就是添加进缓冲区的东西连成一串字符串了,而且装进字符串缓冲区的东西都可以理解为连成一串字符串。

还有很多方法,下面列举的只是一些常用的方法:

public  int  indexOf(String  str, int  fromIndex)//从第fromIndex位搜索子字符串第一次出现在字符串的位置

public    int   indexOf(String   str)//搜索子字符串在字符串中第一次出现的位置

public  void  getChars(int  srcBegin, int  srcEnd, char[]  dst, int  dstBegin)//把字符串的第srcBegin位到第srcEnd-1位的字符拿出来,在dst字符数组第dstBegin位开始存放

public   String   substring(int   start)//从第start位到结尾获取子字符串

public  String  substring(int  start, int  end)//获取第start位到第end-1位的子字符串

public   char   charAt(int   index)//返回第index位的字符

public   StringBuffer  replace(int  start, int  end, String  str)//把第start位到第end-1位替换成指定字符串str

public    StringBuffer   reverse()//反转

public  void  setCharAt(int  index, char  ch)//设定第index位的字符为ch(角标越界会抛异常)

public  StringBuffer  insert(int  offset, String  str)//在第offset位插入指定字符串str

public  StringBuffer  delete(int  start, int  end)//把第start位到第end-1位删除

public   StringBuffer    deleteCharAt(int   index)//删除第index位字符


三:基本数据类型的包装对象----》

基本数据类型都有其对应的包装对象:

byte ----Byte

short----Short

int----Integer

long----Long

boolean----Boolean

float----Float

double----Double

char---- Character

基本数据类型转成字符串:

1,基本数据类型+’””

2,基本数据类型包装类.toString(基本数据类型值)

例如:Integer.toString(62);

字符串转成基本数据类型(char除外):

xxx a=Xxx.parseXxx(String);//一定要是数字型字符串才可以转换

例如:int a= Integer.parseInt("26");//数字型的字符串转换成int型数据

double a=Double.parseDouble("26.23");

boolean a=Boolean.parseBoolean("true");

short b=Short.parseShort("24");

//int b=Integer.parseInt("m123");//数字格式异常,运行出问题

//int b=Integer.parseInt("0x123");//数字格式异常,运行出问题

十进制转其他进制:

String k=Integer.toBinaryString(17);//把十进制的17转成二进制

System.out.println(k); //10001

String k2=Integer.toHexString(17); //把十进制的17转成十六进制

System.out.println(k2);// 11

String k3=Integer.toOctalString(17); //把十进制的17转成八进制

System.out.println(k3);//21

其他进制转成十进制:

int x= Integer.parseInt("110",16);//把十六进制的110转成十进制

System.out.println(x); //272

int x2=Integer.parseInt("110",2); //把2进制的110转成十进制

System.out.println(x2); //6

int x3=Integer.parseInt("110",8); //把8进制的110转成十进制

System.out.println(x3); //72

基本数据类型对象包装的jdk1.5版本新特性(数据拆包与装包,常量池相关):

class  Zfclx5
{
Public   static   void  main(String[] args)
{
//Integer   a= new  Integer(12);
Integer   a=12;//与上句效果一样,但是这里的12 是一个对象!!!
a=a+3;//这句话编译运行通过,这里的3是一个int型数据,
/*
这句话过程是这样的:
先是a.intValue()+3
然后再把其和赋值给a,再封装成一个对象。这就是自动拆包和自动封包的过程。
*/
Integer   b=145;
Integer   c=145;
soc("b==c---"+(b==c));//b==c---false
//对象不一样

Integer   b2=127;
Integer   c2=127;
soc("b2==c2---"+(b2==c2));//b==c---true
//对象相同
/*
这里为何会出现两种结果?
因为,在新特性中,如果数据没有超过byte范围就不会再新建对象,
因为对于Integer,虚拟机事先存放在常量池的数据-128至+127,如果数值超过了范围就需要再新建对象。
对于其他基本数据类型也是类似的原理。
*/

}
public    static  void  soc(String  str)
{
System.out.println(str);
}
}


----------- android培训java培训、java学习型技术博客、期待与您交流!------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: