JAVA基础初探(八)String类、StringBuilder类、JAVA的包装类、基本类型与包装类转换、基本类型与字符串转换

该篇博客目录

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));
    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值