字符串基础

--JAVASE主要用于开发基础的独立的桌面系统应用程序;JAVAEE专门用于企业级解决方法开发,部署和管理一整套体系结构。

--JDK中包含大量API(应用程序编程接口)是一些写好的、可供直接调用的功能。

package day05;

import org.junit.Test;

public class StrigDEMO {
	//@Test
public void creatString(){
	//字符串底层封装了字符数组及针对字符数组的操作算法
	String str="羊肉串";
	//等效于:
	char[] chs={'羊','肉','串'};//定义一个字符数组,存储字符串
	str = new String(str);//将字符数组传递到一个字符串类型的对象中
	System.out.println(str);
}
	//字符串对象的测试方法
//@Test
public void StringTest(){
		//特点1.字符串一旦创建,内容不可改变,只能替换新字符串
		String you = "女友";//you变量指向字符串对象“女友”
		System.out.println(you);
		you="新女友";//如果垃圾回收器没有来得及回收
		System.out.println(you);
		//问:现在内存有几个字符串对象
		//答:2个
		//特点2:两个字符串对象的拼接,都会创建第三个字符串。原字符串都不变
		you = you +"和丈母娘";
				/*问:内存中有几个字符串对象
				 * 答:3个
				 */
              System.out.println(you);
	}
     //字符串的任何改变,都会抛弃旧字符串,创建新字符串

     /*
      * 字符串常量池的测试
      */
//@Test
    public void StringPoolTest(){
    	//第一场会
    	String meeting1 = "小明的杯子";//字符串字面量,保存在常量池中
    	//第二场会
    	//String meeting2 = "小明的杯子";//先到常量池中查找是否有相同内容的字符串常量
    	//小明要求必须换新杯子
    	String meeting2 = new String("小明的杯子");//虽然指向不同的变量,强制创建,不推荐使用
    	//情况3:字面量之间拼接
    	meeting2 ="小明的"+"杯子";//编译时,java会将拼接的结果,保存到常量池中
    	//情况4:普通变量和字面量之间拼接
    	String whose = "小明的";
    	meeting2 = whose +"杯子";
    	//如果有,就直接使用常量池中的字符串常量,不会新建
    	
    	//判断两个变量是否指向同一个对象:==
    	System.out.println(meeting1==meeting2?
    			           "同一个杯子":
    			           "不同的杯子"
    			);
    	//能使用字符串常量的地方就使用字符串常量,这样共享可以节约内存
    	
    }
    //@Test
/*
 * 获得字符串长度(字符个数)
 */
public void lengthTest(){
	//中英文都是一个字符
	String str = "Hello,玛丽奥";
	System.out.println(str.length());
	//比较:数组长度:数组对象.length
	//     字符串长度:字符串对象.length()
}@Test
   /*
    * 已知关键字,找位置:indexOf
    * 
    */
public void indexOfTest(){
	String str = "i can because i think i can";
	//step1:查找第一次“can"关键词出现位置
	int index = str.indexOf("can");
	System.out.println(index);
	//等效:
	index=str.indexOf("can",0);
	
//	step2:查找can第二次出现的位置
//	indexOf方法本身无法查找第二次
//	解决:使用两个参数的indexOf方法,指定开始查找的位置在上一次查找的位置之后
	index = str.indexOf("can",index+1);
	
	//step3:查找字符i,第一次出现的位置
	index =str.indexOf('i');
	System.out.println(index);

  //step4:查找龙虾
  index = str.indexOf("龙虾");//返回-1说明真的没有
  
  //step5:查找关键字i最后出现的位置
  index = str.lastIndexOf('i');
  //以最后一个元素开始,从后向前,找最后一次出现的位置
  //Dengxiao
  index=str.lastIndexOf('i',str.length());
  
  //step6:查找关键字i倒数第二次出现的位置
  //从上次找到的位置之前,向前继续查找
  index=str.lastIndexOf('i',index-1);
  
  
}



}

--凡是在编译时期救你确定的字符串(字面量、常量和常量连接的结果)都是在常量池中创建

例如:String you="女友";字面量保存在常量池

you = "女友"+"丈母娘";还是字面量,保存在常量池

you=you+"和丈母娘";属于运行时才能拼接出新字符串对象,动态创建在堆中;

JAVA为提高性能,会尽可能重用常量池中的常量字符串;


猜你喜欢

转载自blog.csdn.net/qq_40531768/article/details/80286530