饿猫学java——String深入浅出


String学习

一,String介绍:

 

来自package java.lang;

String表示字符串,所谓字符串,就是一连串的字符;

String类被final修饰,是常量:public final class String存储在常量池中

常量池:

JVM中一块独立的区域存放字符串常量和基本类型常量publicstatic final)。String使用privatefinal char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的.——可以被重新赋值,但是不能改变他自身。

 

 

 

二,String对象比较:

String中的"" 和null     

public static void main(String[] args) {
		String str = "";
		String strNull = null;
		System.out.println("str=" + ",strNull=" + strNull);
		// 打印结果是str=,strNull=null
	}
单独使用""号创建的字符串都是常量,编译期就已经确定存储到常量池中;而null代表的是一个空的引用

String中的"java" 和newString(java)     

public static void main(String[] args) {
		String str1 = "java";
		String str2 = "java";
		String strNew1 = new String("java");
		String strNew2 = new String("java");
		System.out.println(str1.equals(str2));//打印结果是true 都在池内
		System.out.println(str1.equals(strNew1));//打印结果是true 都在池内
		System.out.println(str1==str2);//打印结果是true 都在池内
		System.out.println(str1==strNew1);//打印结果是false str1在池内,strNew1在池外
		System.out.println(strNew1.equals(strNew2));
		//true 都在池外,比较的是String的equals方法,他们都指向常量池中的同一个“” ;
		System.out.println(strNew1==strNew2);//false 都是对象,但是 == 比较的是地址
	}

内存图:


使用""创建的会直接加载到常量池中,常量在编译时期就能确定

使用newString("")创建的对象会存储到堆内存中,是运行期新创建的;


String的连接

//无变量连接
		String s1 = "我是"+"猫猫";//javac在生成.class文件的时候就会把+去掉
								//编译期就能确定是s1 = "我是猫猫" 运行时会加载到内存池中
		String s2 = "我是猫猫";
		System.out.println(s1.equals(s2));//true
		System.out.println(s1 == s2);//true


使用只包含常量的字符串连接符如"aa"+ "bb"创建的也是常量,编译期就能确定,已经确定存储到常量池中;


使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在堆中;

 

//有变量的情况下
		String s1 = "我是";
		String s2 = "饿肚子的猫";
		String s3 = s1 + s2;	
		/*"我是饿肚子的猫"
		 其内部其实是这样的
		 StringBuilder sb = new StringBuilder();
		 sb.append(s1);
		 sb.append(s2);
		 Stirng s3 = sb.toString();//返回一个池外的字符串new String()
		 */
		String s4 = "我是饿肚子的猫";
		System.out.println(s3.equals(s4));//true 
		System.out.println(s3 == s4);//false 

String常用方法

String():初始化一个新的String 对象,使其表示一个空字符序列,并不是返回空(不等于 null)。

String(StringBuffer buffer):根据StringBuffer对象来创建String对象;

String(StringBuilder builder):同上

char charAt(int index):取字符串中指定位置的字符,index从0开始计算。

String concat(String str):连接字符串,等同于“+”;

boolean contentEquals(StringBuffer buffer):若二者包含的字符序列相同时就返回true;

boolean equals(Object obj):将该字符串与指定对象比较,若二者包含的字符序列相等返回true;

boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写;

byte[] getBytes():将该字符串转换成byte数组;

int indexOf(String str):找出str字符串在该字符串中第一次出现的位置;

int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始;

int lastIndexOf(String str) 返回指定子字符串在此字符串中最后一次出现处的索引;

int length():返回当前字符串长度;

String replace(char oldChar, char newChar) :返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有oldChar 得到的。

String replaceAll(String regex, String replacement) 使用给定的 字符串replacement替换此字符串所有的regex字符串;

boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始.

String[] split(String regex):把字符串按指定的字符串分隔开。

String substring(int beginIndex) 返回一个新的字符串,从beginIndex开始截取,它是此字符串的一个子字符串;

String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串;[begin,end)

char[] toCharArray() 将此字符串转换为一个新的字符数组。

String toLowerCase() 将此 String 中的所有字符都转换为小写;

String toUpperCase()转成大写;

static String valueOf(基本类型obj):把基本类型值转成字符串;

String trim() :忽略字符串前导空白和尾部空白。



附注:(来自百度知道)
final设计模式应用
设计模式种模式叫做变模式Java通过final关键字容易实现模式讲解final成员时用程序Bat.java变模式例子对此感兴趣参考阎宏博士编写Java与模式讲解

 

原文地址:https://www.cnblogs.com/znycat/p/4352654.html