第八天Sring类与基本类型数据包装类

String类:


1.字符串的特点:
    java中用String类来描述字符串。
    字符串是一个特殊的对象,一旦初始化就不可以被改变,因为是常量。

  常见面试题1
String s="abc";
String s1=new Strng("abc");是否相同?
前者"abc"是一个对象。后者是两个对象,new string()代表一个对象,"abc"也代表一个对象。
Sop(s1==s2);==比较的是数据。false
Sop(s1.equals(s2));比较的是内存的地址值,equals覆写了Object类中的equals方法。
True


   常见面试题2
String a="abcd";//在缓冲池创建了一个abcd的字符串。
String a1="ab";//a1和a2都是变量,无法确定。
String a2="cd";
String b=a1+a2;//b是要重新进行分配的。
String c="ab"+"cd";//两个都是常量值,用连接符连接在一起还是字符创。abcd
System.out.println("a==b:"+(a==b));//false
System.out.println("a==c:"+(a==c));//true


2.常见操作方法:
   A获取的方法:
      a获取长度:Int length();
      
      注意:数组长度是个属性,字符串是个方法
      
      b获取字符串中的字符:charAt(int index);返回值是一个字符。
      
      c一个字符或者一个字符串在一个字符串中的位置
Int indexof(int ch)
Int indexof(int ch,int fromIndex)
Int indexof(ch,fromIndex)
Int indexof(srting,fromindex)
Int lastIndexof(ch);
        注意:这些获取索引位的方法,如果没有查找的内容,返回-1,所以这个方法。
     
     d获取部分字符串:String substring(begin,end)
  B判断的方法:
       a是否包含指定的字符串 Boolean contains(String)
      
       b是否是以指定的字符串开头 Boolean startsWith(String)
       
       c是否是以指定的字符串结尾  Boolean endwith(String)
       
       d忽略大小写判断字符串  Boolean equalsIgnoreCase(string)
 C 转换功能:
    a将字符串转成小写  String toLowerCase();
    b将字符串转成大写  String toUpperCase();
    c将字符串转成数组
Byte[] getBytes();
Char[] getChar();
  d将字符串转成字符串数组   String[]
  e将字符串中的内容进行替换  
String replace(oldch1,new ch2)
String replace(string1,string2)
  f去除字符串两端的空白  Trim();


3.如何查阅API文档的小技巧,先查找返回值


4.常量池:
   String是一个特殊的包装类数据。可以用下面两种方式创建: 
    
   String str = new String("abc"); 
   String str = "abc"; 


   第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。


   而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈(常量池)中有没有存放"abc",如果没有,则将"abc"存放进栈(常量池),并令str指向”abc”,如


   果已经有”abc” 则直接令str指向“abc”。 


   比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。 
        
          String str1 = "abc"; 
          String str2 = "abc"; 
          System.out.println(str1==str2); //true 
          
          可以看出str1和str2是指向同一个对象的。 
          
          在eclipse中的调试视图中可以看到abc的id是同一个。实际上java对常量池中进行了优化。同样的内容只保留一份。用这种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
          


            String str1 =new String ("abc"); 
            String str2 =new String ("abc"); 
            System.out.println(str1==str2); // false 
          
           在调试中可以看到有两个abc,它们的id不同。
           
           也就是说,用new的方式是生成不同的对象。每一次生成一个。 
        
           对于String str = new String("abc");一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。 
        
           另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!


           此时对象可能并没有被创建!而可能只是指向一个先前已经创建的,放在常量池里的对象(广义的对象,不仅指new出的)。只有通过new()方法才能保证每次都创建一个新的对象。由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
 5. 基本类型数据包装类  Integer类
 |-- 静态方法  parseInt(String)将数字格式的字符串转成整型数据
 |-- 静态方法  parseInt(String,int)将数字格式的字符串转成整型数据,基数就是进制,标明要转的数据的进制,转换的结果都是十进制
 |-- toBinaryString().......
 |-- 自动装箱和拆箱  Integer i = 30;   i = i + 5;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值