该篇博客目录
1、String类(概述、构造方法、常用方法)
2、StringBuilder类
3、JAVA的包装类
4、JAVA基本类型与包装类的转换(装箱、拆箱)
5、JAVA基本类型与字符串的转换
一、String类(概述、构造方法、常用方法)
1、概述
- 字符串由多个字符组成的串数据
- 字符串也可看做字符数组
- 字符串有不变性(String创建对象后则不能被修改)
- 所谓的修改是创建了新的对象,所指向的内存空间不同
- 多次出现的字符常量,JAVA编译程序只会创建一个
下面是一个关于String关于不同对象的问题和多次出现字符常量,JAVA只会创建一个的验证
package hhh; public class my_hello_world { public static void main(String[] args) { // TODO Auto-generated method stub String s1="a"; String s2="a"; String s3=new String("a"); String s4=new String("a"); //s1==s2的原因是因为java中同一个常量字符串多次出现会被编译器优化,只创建一个字符串//返回true System.out.println(s1==s2); //s1和s3是不同对象//返回false System.out.println(s1==s3); //s1和s4是不同对象//返回false System.out.println(s3==s4); } }
Tip:一旦一个字符串在内存中创建,则这个字符串将不可改变,若要改变可以使用StringBuffer或StringBuilder类
2、String构造方法
- public String()
- 无参构造
- public String(byte[] bytes)
- 通过平台的默认字符集解码指定的byte数组,构造一个新的String(即将字符数组转成字符串)
- public String(byte[] bytes,int offset,int length)
- 通过使用指定的charset解码指定的byte子数组,构造一个新的String(即把字符数组的一部分转成字符串)
- public String(char[] value)
- 把字符数组转成字符串
- public String(char[] value,int offset,int count)
- 把字符数组一部分转成字符串
- public String(String original)
- 把字符串常量转成字符串(即新创建的字符串是该参数字符串的副本)
3、String类常用方法
a、常用方法
b、方法演示Demo
package hhh;
import java.util.Arrays;
public class my_hello_world {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="学习 JAVA 嗯嗯";
System.out.println("字符串长度:"+str.length());
String c="j";
System.out.println("字符串中“j”的位置:"+str.indexOf(c));
System.out.println("字符串“嗯嗯”的位置:"+str.indexOf("嗯嗯"));
System.out.println("如果字符串中没有“大家好”的字符,返回-1:"+str.indexOf("大家好"));
String arr[]=str.split(" ");
System.out.println("按空格拆分成数组:"+Arrays.toString(arr));
System.out.println("获得3-7之间的子串:"+str.substring(3,7));
//System.out.println();
System.out.println("转换为小写:"+str.toLowerCase());
System.out.println("获取索引为1位置的字符:"+str.charAt(1));
byte b[]=str.getBytes();
System.out.print("转换为为字节数组:");
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
System.out.println();
}
}
c、输出结果
d、练习:功能:统计字符串中字符“a”出现的次数
String s="asalkmsasklndaskaskjndakjsnask";
//计数器
int num=0;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='a')
{
num++;
}
}
System.out.println("字符a出现的次数:"+num);
二、StringBuilder类
1、StringBuilder与StringBuffer的区别
- StringBuffer是线程安全的
- StringBuilder则没有实现线程安全,所以性能略高。因此,如果需要创建一个内容可变的字符串对象优先选择StringBuilder(注意是一个内容可变的字符串对象)
2、StringBuilder与String的区别
先看以下Demo
String str="hello";
System.out.println(str+"world");
System.out.println("str");
//输出:
//helloworld
//hello
- 从上面的Demo和运行结果看出,程序运行时会在堆中额外创建一个对象来保存“helloworld”,当频繁操作字符串时,就好额外产生很多临时变量。使用StringBuilder或StringBuffer就可以避免这个问题
3、定义StringBuilder
创建一个空的StringBuilder()
- StringBuilder str1=new StringBuilder();
创建一个带String参数的StringBuilder(String str)
- StringBuilder str2=new StringBuilder(“hello”);
4、StringBuilder常用方法(追加、插入、转换为String对象)
package hhh;
import java.util.Arrays;
public class my_hello_world {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuilder ssstr=new StringBuilder("xulinjie");
System.out.println(ssstr);
//字符串后追加字符串
ssstr.append(" hello");
System.out.println(ssstr);
//字符串后追加整数
ssstr.append(522);
System.out.println(ssstr);
//在字符串指定位置插入内容
ssstr.insert(2,"@");
System.out.println(ssstr);
//转换为String对象
String ssstr2=ssstr.toString();
System.out.println(ssstr2);
}
}
5、练习:功能:将一个由英文字母组成的字符串转换成指定格式,从右边开始每三个字母用逗号分隔开的形式
StringBuilder obj=new StringBuilder();
obj.append("asasdsdadadasasdqsdsa");
for(int i=obj.length();i>0;i-=3)
{
obj.insert(i, ",");
}
System.out.println(obj.toString());
三、JAVA的包装类
1、定义
例如int、float、double、char等这些基本数据类型是不具备对象特性的,不能调用方法。为了让基本数据类型具备对象特性,JAVA为每个基本数据类型提供了一个包装类
基本类型和包装类之间的对应关系
2、JAVA包装类两大方法
- 将本类型和其他类型进行转换的方法
- 将字符串和本类型及包装类相互转换的方法
第二点后文会细说
3、一个关于Integer包装类转换为double,float,int基本类型的Demo
package hhh;
import java.util.Arrays;
public class my_hello_world {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=80;
//创建Integer包装类对象,表示变量a
Integer b=new Integer(a);
//将Integer包装类转换为double类型
double c=b.doubleValue();
//将Integer包装类转换为float类型
float d=b.floatValue();
//将Integer包装类转换为int类型
int e=b.intValue();
System.out.println("Integer包装类"+b);
System.out.println("double类型"+c);
System.out.println("float类型"+d);
System.out.println("int类型"+e);
}
}
四、JAVA基本数据类型与包装类的转换(装箱、拆箱)
在jdk1.5引入自动装箱和拆箱机制后,包装类和基本类型之间转换更加方便
下面是以Integer包装类为例(其他包装类类似)
1、装箱机制
把基本类型转换成包装类,使其具有对象的特性
装箱机制可分为两种
- 自动装箱
手动装箱
public class my_hello_world { public static void main(String[] args) { // TODO Auto-generated method stub int a=80; //手动装箱 Integer x=new Integer(a); //自动装箱 Integer y=a; } }
2、拆箱机制
将包装类对象转换成基本数据类型的值
拆箱机制可分两种
- 自动拆箱
手动拆箱
public class my_hello_world { public static void main(String[] args) { // TODO Auto-generated method stub //定义一个Integer包装类对象,值为2 Integer a=new Integer(2); //手动拆箱为int类型 int m=a.intValue(); //自动拆箱为int类型 int n=a; } }
3、练习:装箱拆箱Demo
package hhh;
import java.util.Arrays;
public class my_hello_world {
public static void main(String[] args) {
// TODO Auto-generated method stub
double a=91.5;
Double b=new Double(a);//手动装箱
Double c=a;//自动装箱
System.out.println("装箱后的结果为:"+b+"和"+c);
Double d=new Double(87.0);
double e=d.doubleValue();//手动拆箱
double f=d;//自动拆箱
System.out.println("拆箱后的结果为:"+e+"和"+f);
}
}
//输出:
//装箱后的结果为:91.5和91.5
//拆箱后的结果为:87.0和87.0
五、JAVA基本类型与字符串的转换
1、基本数据类型转换为字符串的三种方法
- 使用包装类的toString()方法
- 使用String类的valueOf()方法
用一个空字符加上基本数据类型,得到的就是基本数据类型对应的字符串
public class my_hello_world { public static void main(String[] args) { // TODO Auto-generated method stub int a=2; String str1=Integer.toString(a); String str2=String.valueOf(a); String str3=a+""; System.out.println(str1+" "+str2+" "+str3); } }
2、字符串转换为基本数据类型的两种方法
- 调用包装类的parseXxx静态方法
调用包装类的valueOf()方法转换为基本数据类型的包装类,会自动拆箱
public class my_hello_world { public static void main(String[] args) { // TODO Auto-generated method stub String str="2"; int a=Integer.parseInt(str); int b=Integer.valueOf(str); System.out.println(a+" "+b); } }
3、基本类型和字符串之间转换Demo
package hhh;
import java.util.Arrays;
public class my_hello_world {
public static void main(String[] args) {
// TODO Auto-generated method stub
double m=78.5;
//double型转换为字符串
String str1=String.valueOf(m);
System.out.println("m转换为String型后与整数20的求和结果:"+(str1+20));
String str="120.22";
//字符串转换为double类型
double a=Double.valueOf(str);
System.out.println("str转换为double型后与整数20的和结果为:"+(a+20));
}
}