String 类的常用的功能
转换功能
char[] toCharArray() :将String转换字符数组
byte[] getBytes() :将字符串转换成字节数组
String[] spilt(String regex):通过指定的分割符号,将字符串转换成字符串
数组
public static String valueOf(int/double/long/....Object):可以将任何类
型转换String
String toUpperCase() :转换大写
String toLowerCase():转换小写
获取功能
String subString(int beginindex):通过截取字符串:获取一个新的字符串(从指定位
置截取,默认截取到末尾)
String subString(int beginIndex,int endIndex):从指定开始,到指定位置endIndex-1
处结束
int length():获取字符串长度
char charAt(int index):返回指定索引处的字符
String concat(String str):将指定字符串拼接到末尾,获取一个新的字符串
其他功能
public int compareTo(String str):两个按照字典顺序比较
两个字符串,----转换字符串数组,获取每一个字符串长度;
Math.min(长度1,长度2):获取长度最小的值
有一个统计变量 < 最小长度的值
不断的循环
统计变量从0开始,依次两个字符数组中的每一个字符值
char v1[统计变量] = 字符 ; "hello"
char v2[统计变量] = 字符; "abc" "hel"
判断:
两个字符是否不一样,
两个字符相减---->ASCII码表的值在相减
循环结束完毕,如果上面判断一直不成立
return 第一个字符串的长度- 第二个长度;
StringBuffer 和 String 的区别(面试题)
String的特点:字符串常量,一旦创建,其值不改变; 不支持可变的字符序列
StringBuffer:支持的可变的字符序列,而且线程安全的,—执行效率低,多线程环境会 用,单线程环境下用的StringBuilder这个类;
方法的形式参数:
String和基本类型效果一样;形式参数的改变不影响实际参数
StringBuffer:作为方法的形式参数,形式参数的改变,直接影响实际参数;
实际开发中:需要把A类型–B 类型,然后B类型转换成A类型?
A类型—>B类型,目的是为了使用B类型的特有功能,但是结果类型可能A类型, 所有B类型的功能使用完之后,然后在转换A类型; 只要牵扯类型转换,必须记住常用的转换
/**
* 类型转换
* StringBuffer和String的类型转换
*
* String---->StringBuffer,目的为了StringBuffer的特有功能
* StringBuffer--->String,结果需要是String类型
*/
public class StringBufferDemo3 {
public static void main(String[] args) {
//String----StringBuffer
//有一个字符串
String s = "hello" ;
//StringBuffer sb = s;
//方式1:利用StringBuffer()无参构造方法+append(String str)
//创建一个字符串缓冲区对象
StringBuffer sb = new StringBuffer() ;
sb.append(s) ;
System.out.println(sb); //字符串缓冲区存储的数据内容 "hello",类型是
StringBuffer
System.out.println("----------------------------------");
//方式2:利用StringBuffered的有参构造方法StringBuffer(String str)
StringBuffer sb2 = new StringBuffer(s) ;
System.out.println(sb2);
System.out.println("-----------------------StringBuffer转换成String--
---------------------");
//StringBuffer --->String
StringBuffer buffer = new StringBuffer("helloworld") ;//字符序列是
helloworld,外面的类型StringBuffer
//方式1:public String(StringBuffer buffer) ;String类的构造方法
String str = new String(buffer) ;
System.out.println(str) ; //内容"helloworld",类型String
System.out.println("-------------------------------------");
//方式2:public String toString() 显示的应该是字符串缓冲区中的实际的
字符序列内容
String str2 = buffer.toString();
System.out.println(str2);
/*int i = 100 ;
String s4 = "100" ;*/
}
}
自动拆装箱
/**
* @author 高圆圆
* @date 2022/8/17 16:44
*
* Integer类的构造方法
* public Integer(int value):将int类型----Integer类型
* public Integer(String s) throws NumberFormatException :将数字字符串
转换成Integer
* throws:抛出异常的意思
* 抛出异常的可能性,当你传入的字符串如果不是数字字
符串,jvm解析的时候,将这个异常就信息打印在控制台上
*
*
*/
public class IntegerDemo2 {
public static void main(String[] args) {
int i = 100 ;//基本类型
// public Integer(int value):将int类型----Integer类型
Integer ii = new Integer(i) ;
System.out.println(ii) ;//100
ii += 200 ;
System.out.println(ii);
//public Integer(String s) throws NumberFormatException :将数字字符
串 转换成Integer
//String s = "hello" ;//字符串: 必须是数字字符串 Integer是int类型包
装类型
/* String s = "20" ;
Integer iii = new Integer(s) ;
System.out.println(iii);*///20
}
/**
* 上面代码的使用反编译工具查看
* jdk5新特性:自动拆装箱 :基本类型--- 变成对应的引用类型 "装箱"
* 这些引用类型----->基本类型 ""拆箱
*
* int i = 100;
* Integer ii = new Integer(i); //装箱 int---->Integer
* System.out.println(ii);
*
* //我们的写的代码 ii+=200 ;
* //反编译工具---将 ii+=200:优化下面格式
*
* ii = Integer.valueOf(ii.intValue() + 200); //参数里面:
ii.intValue()+ 200 : ii--->拆箱 int类型 +200 求和
* //参数里面完成计算---->int结果
* public static Integer valueOf(int i) :将int类型的结果----
>Integer "装箱"
*
*
* System.out.println(ii);
*
*/
}
Integer内部缓存区
/**
* @author 高圆圆
* @date 2022/8/17 17:13
* 将一个常量值赋值给Integer类型,通过反编译工具 调用的Integer.valueOf(int类
型的值)
*/
public class IntegerTest {
public static void main(String[] args) {
Integer i1 = 127 ;
Integer i2 = 127 ;
System.out.println(i1==i2) ;//true
System.out.println(i1.equals(i2)) ;//true
Integer i3 = 127 ;
Integer i4 = new Integer(127) ;
System.out.println(i3==i4) ; //false
System.out.println(i3.equals(i4)) ;//true
//值128 超过-128-127
Integer i5 = 128 ; //Integer i5 = new Integer(128);
Integer i6 = 128 ; //Integer i6 = new Integer(128);
System.out.println(i5==i6) ; //false
System.out.println(i5.equals(i6)) ;//true
Integer i7 = new Integer(128) ;
Integer i8 = new Integer(128) ;
System.out.println(i7==i8) ;//false
System.out.println(i7.equals(i8)) ;//true
}
}
/**
* Integer的valueOf(int i)的原码
* p
*
* class Integer{
*
* static final Integer cache[]; //Integer类型数组
*
* ublic static Integer valueOf(int i) { //127
* * if (i >= IntegerCache.low && i <= IntegerCache.high)
* //范围-128-127之间:传递int类型的值在-128-127之间,直接从内部缓存区:(数组
里面取数据即可!)
* * return IntegerCache.cache[i + (-IntegerCache.low)];
*
* 如果超过这个范围,new Integer(int类型的值)
* * return new Integer(i);
* * }
* //Integer的静态的成员内部类
* private static class IntegerCache { //Integer的内部缓存区
*
*
* static final int low = -128;
* static final int high;
* int h = 127 ;
* high = h;
*
* ...
*
* }
*
* }
*
*
*/
int和String的相互转换
/**
* @author 高圆圆
* @date 2022/8/17 17:02
*
*
* 基本数据类型:八种 如何转换String
* String---->基本类型
* 使用 int举例
*
* int---->String :Integer.valueOf(int类型的值)
* String---->int :Integer.parseInt(数字字符串)
*/
public class IntegerDemo3 {
public static void main(String[] args) {
//int---->String
int i = 10 ;
//方式1:字符串拼接 符号+
System.out.println(i+"");//"10"
//方式2:int---->Integer:装箱---->String
//Intege(int i)
Integer ii = new Integer(i) ;
//Integer---->String :public String toString()
String s = ii.toString();
System.out.println(s) ; //"10"
//方式3:Integer类的静态方法:public static String toString(int i) (推
荐)
String s2 = Integer.toString(i);
System.out.println(s2);
System.out.println("-----------------------------------------------")
;
//String --->int
String str = "100" ;// 数字字符串
//方式1:推荐 Integer 静态方法 public static int parseInt(String
str): "最常用的"
int number = Integer.parseInt(str);
System.out.println(number); //100
//方式2:String---->Integer--->int
//Integer(String s)
Integer integ = new Integer(str) ;
//public int intValue()
int number2 = integ.intValue();
System.out.println(number2) ;
}
}