黑马程序员—-java基础:String与StringBuffer及基本数据类型包装类

  • Post author:
  • Post category:java



——- android培训、java培训、期待与您交流! ———-


java中一些基础类比如String、StringBuffer和基本数据类型包装类都是非常常见且使用非常频繁的类。这些类虽然简单,但是想要熟练使用也必须要学习,虽然API文档对这些类的用法都讲的比较详细,但是我觉得还是有必要再整理一下。

一、String类


1、概述


String就是字符串的意思,首先要明确一点的是String并不属于基本数据类型。


因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。


注意new String() 和 newString(“”)都是声明一个空的字符串而不是null。


字符串一旦被初始化就不可以被改变。




2、初始化



对象初始化格式String s = new String(“abc”);


—-可以简写为String  s = “abc”;




3、字符串常量池


讲之前首先我们先来看一个例子

//例1
      String s1 = “abc";
      String s2 = "abc";
      String s3 = "a" + "bc";
      System.out.println(s1 == s2); // true
      System.out.println(s1 == s3);// true 

//例2 
   String s1 = new String("abc"); 
    String s2 = new String("abc");
    String s3 = "a" + new String("bc");
    System.out.println(s1==s2);        //false
    System.out.println(s2==s3);        //false


运行这个2个例子的结果,我们会惊奇的发现例1和例2运行的结果竟然不同。上面不是说用new和不用new是一样的吗?


这里我们就要引入常量池的概念:常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。


Java会确保一个字符串常量只有一个拷贝。


因为例子中的s1和s2中的”abc”都是字符串常量,它们在编译期就被确定了,所以s1==s2为true;


用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。



4、常用方法


4.1、获取:


4.1.1 获取字符串中字符的个数(长度).


int length();



4.1.2 根据位置获取字符。


char charAt(int index);



4.1.3 根据字符获取在字符串中的第一次出现的位置.


int indexOf(int ch) ch为字符的Unicode编码


int indexOf(int ch,int fromIndex) 从指定位置进行ch的查找第一次出现位置


int indexOf(String str)根据字符串获取在字符串中的第一次出现的位置.


int indexOf(String str,int fromIndex)从fromIndex指定位置开始,获取str在字符串中出现的位置.



4.1.31反向索引,从后向前查找


int lastIndexOf(int ch)


int lastIndexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置


int lastIndexOf(String str);


int lastIndexOf(String str,int fromIndex);



4.1.4 获取字符串子串。


String substring(int beginIndex, int endIndex)//包含begin 不包含end 。


String substring(int beginIndex);//从beiginIndex索引开始截取字符串。



4.2、转换


4.2.1 将字符串变成字符串数组


String[]  split(String regex):涉及到正则表达式.



4.2.2 将字符串变成字符数组。


char[] toCharArray();



4.2.3 将字符串变成字节数组。


byte[] getBytes();



4.2.4 将字符串中的字母转成大小写。


String toUpperCase():大写


String toLowerCase():小写



4.2.5将字符串中的内容进行替换


String replace(char oldch,char newch);


String replace(String s1,String s2);



2.6 将字符串两端的空格去除。


String trim();



2.7 将字符串进行连接 。


String concat(string);



4.3、判断比较


4.3.1 两个字符串内容是否相同啊?


boolean equals(Object obj);


boolean equalsIgnoreCase(string str);忽略大写比较字符串内容。


4.3.2 字符串中是否包含指定字符串?


boolean contains(string str);


4.3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。


boolean startsWith(string);


boolean endsWith(string);

二、StringBuffer类




1、概述


StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。


所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。


在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。


但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。




2、StirngBuffer初始化


StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。



3、特点


a、长度的可变的。


b、可以存储不同类型数据。


c、最终要转成字符串进行使用。


d、可以对字符串进行修改。



4、常用方法



4.1添加:


StringBuffer append(data);//能够添加各种数据类型


StringBuffer insert(index,data); //在索引出插入各种类型



4.2删除:


StringBuffer delete(start,end):包含头,不包含尾。


StringBuffer deleteCharAt(int index):删除指定位置的元素



4.3查找:


char charAt(index); //在该索引出的char值


int codePointAt //索引处的字符


int indexOf(string); //


int lastIndexOf(string);


int capacity() //返回当前Buffer的容量(初始16)


int length()  //长度



4.4修改:


StringBuffer replace(start,end,string);


void setCharAt(index,char);


StringBuffer reverse() 将此字符序列用其反转形式取代(String类中没有反转)


void trimToSize()  尝试减少用于字符序列的存储空间。






5、StringBuilder


jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder


这里就不详细介绍了。注意一下它们的不同点就好了。


不同的是:


StringBuffer是线程同步的。通常用于多线程。


StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。

三、基本数据类型包装类




1、概述


Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类。



2、对应关系


byte ——Byte


short ——Short


int ——Integer


long—–Long


float—–Float


double—-Double


char—-Character


boolean—Boolean



3、Integer类内部的常用方法


事实上这几种数据类型包装内是比较相似,我只以Integer为例简单介绍一下。



a、parseInt方法


//将数字字符串转换为int数值。         String s = “123”;         int n = Integer.parseInt(s);


//将字符串”120”按照十进制转换为int,则结果为120          int n = Integer.parseInt(“120”,10);


//将字符串”12”按照十六进制转换为int,则结果为18          int n = Integer.parseInt(“12”,16);


//将字符串”ff”按照十六进制转换为int,则结果为255          int n = Integer.parseInt(“ff”,16);




b、int转字符串


可以直接用+号连接,也可以用toString函数。


//将int类型转换为对应的String类型。     int m = 1000;     String s = Integer.toString(m);


c、十进制转成其他进制。


toBinaryString();


toHexString();


toOctalString();

四、最后



即使是简单的东西,我们也要把它重视起来,坚持每天进步一点点,最后我们就是成功的。

转载于:https://www.cnblogs.com/jinfulin/p/4117616.html