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

----------- 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学习型技术博客、期待与您交流!------------ 




      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值