Java 从入门到精通 第16章String类

16.1 String类

~  Java中定义了String和StringBuffer连个类来封装对字符串的各种操作,它们放在java.lang包中,不需要用import java.lang这个语句导入就可以直接使用它们
  String类用于比较两个字符串,查找和抽取串中的字符或子串,进行字符串与其它类型之间的相互转换。String类对象的内容一旦被初始化就不能在改变,对于String类的每次改变都会生成一个新的字符串,比较浪费内存。
  StringBuffer类用于内容可以改变的字符串,可以将其他各种类型的数据增加、插入到字符串中,也可以转置字符串中原来的内容。StringBuffer每次都改变自身,不生成新的对象,比较节约资源。

16.1.1 字符串的声明

String s1;
//必须显式的赋初值,否则System.out.println(s)会报错

6.1.3 String类的两种实例化方式

String s="有志者事竟成";
String s=new String("Where there's will, there's way");

16.1.4 String内容的比较

public boolean equals(String anObject)
public boolean equalslIgnorecase(String anotherString)//不区分大小写
public int comprareTo(String anotherString)

1.判定是否一致比较方法:

(1)equals(object)
(2)==//属于地址比较

//范例
String str1="Hello";
String str2="Hello";
String str3=str2  //引用传递
str1==str2//false
str1==str3//false
str2==str3//true
str1.equals(str2)//true
str2.equals(str3)//true
str1.equals(str3)//ture

2.判定字符串大小方法

//范例
//compareTo比较的是字符串第一个不同字符的ASCII码值
String str1="This is a string."
String str2=new String("this is a string");
int result1=str1.compareTo("That is another string");//resualt1=8
int result2=str2.compareTo("This is a String.");//result2=0
int resualt3=str1.compareTo(str2);//result3=-32

16.1.5 字符串常量是String类的匿名对象

String str="Hello";
System.out.println(str.equals("Hello"));
System.out.println("Hello".equals(str));//true,"Hello"是String类的匿名对象

//如果str=null,则System.out.println(str.equals("Hello"));出现NullPointerException
//System.out.println("Hello".equals(str))可自动处理null问题,不会出错

16.1.6 两种字符创实例化方式的区别

1.直接赋值,好比将一个字符串的常量赋给了指定的字符串String变量,而每个字符串常量都属于的匿名对象。仅开辟一块堆内存和一块栈内存空间。共享设计模式。

//范例
String strA="Hello";
String strB="Hello";
String strC=strB;
strA==strB//true;
strA==strC//true;
StrB==strC//true;

2.构造方法实例化,会开辟两块堆内存空间,其中一块内存空间将成为垃圾,通过构造方法进行的String类对象,也无法进行自动入池的操作,即数据无法共享

//范例
String strA="Hello";
String strB=new String("Hello"),intern();//手工入池
String strC="Hello"
String StrD=new String("Hello");
strA==strB//true
strA==strC//true
strB==strC//true
strA==strC//false

16.7.1 字符串一旦声明则不可改变

//范例
String str="Hello";
str+="World";
str=str+"!!!";
System.out.println(str);//输出Hello,World!!!,str看似改变了,事实并非如此
//字符串的内容并没有改变,改变的只是String类对象的引用,并且会产生大量字符串垃圾。应该尽量避免如是操作

16.1.8 String类的常用方法

1.字符与字符串

str.charAt(0);//取出字符串第一个字符
str.charAt(3);

public String(char[] value)
public char[] toCharArray()
public charAt(int index)
public String(char[] value,int offset,int count)

2.字节与字符串

3.字符串查找方法

if(str.contains("hello")

4.字符串替换

str.replaceAll("o""***");//用***替换o

5.子串截取

str.substring(5)//截取从指定位置到末尾
str.substring(0,5)//截取从指定位置到指定位置

6.字符串拆分

String data[]=str.split(" ");//按空格拆分

7.其他方法

toUpperCase()转化成大写
toLowerCase()转化成小写
isEmpty()判断是否为空
length()字符串长度
concat()//功能与“+”一致
intern()//入池

16.2总结

1.String s=new String(“java”)
创建的对象有两个,一个是"java",一个是指向”java“的引用对象s

2.Java中堆内容与栈内存的区别
(1)堆内容是栈内存的一个子集
(2)栈内存存取速度仅次于寄存器,栈内存里面的数据可共享,但是其大小和生存期必须在运行前确定
(3)堆内容是运行时可动态分配的数据区,从速度上看比内存慢,堆内容的数据不可共享,大小和生存期可以在运行前确定
(4)new关键字是运行时在堆内容里创建的对象。每new一次都会创建一个新的对象,因为堆数据不共享。

你可能感兴趣的:(Java基础)