包装类、String类

本文详细介绍了Java中基本数据类型的包装类及其使用方法,包括数据类型间的转换、自动装箱拆箱等特性。同时深入探讨了String类的创建、常用方法及内部实现机制,并对比了String与StringBuilder、StringBuffer的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 包装类(位于java.lang中)
① 概念:对8种基本数据类型分别定义了对象类型,这些类称为基本数据类型包装类。
    ② 基本数据-包装类:【重点】
            基本数据类型          包装类
                byte               Byte
short              Short
int                Integer
long               Long
float              Float
double             Double
char               Character
boolean            Boolean
             
③ 数据类型之间的转换
//int ---- Integer
//int---->Integer
int a=12;
Integer i1 = new Integer(a);
System.out.println(i1);
Integer i2=Integer.valueOf(a);//静态方法
System.out.println(i2);
//Integer---->int
int a2 = i2.intValue();
System.out.println(a2);

//String --- Integer
//String--->Integer
String str="123";
Integer i3 = new Integer(str);
System.out.println(i3);
Integer i4 = Integer.valueOf(str);
System.out.println(i4);
System.out.println(i4);
//Integer--->String
String s1=i4.toString();
System.out.println(s1);
String s2=i4+"";
System.out.println(s2);

//int  ----  String
//int--->String
int a3=123;
String s3=a3+"";
System.out.println(s3);
//String--->int【开发重点】
String s4="1234";
int a4=Integer.parseInt(s4);
System.out.println(a4);

注意:String转换成int/Integer时,要求String中内容必须是纯数字,
      例如"123"/"2341",否则运行报错,错误信息如下:
  java.lang.NumberFormatException(数字格式转换异常)

④ JDK5.0之后,提供了自动的装箱和拆箱功能,即包装类和基本数据类型之间
        可以自动转换。【重点】
        将基本数据类型自动转换成包装类型称为装箱。
  int a=12;
  Integer i=a;
  或是:Integer i2=12; 
        将包装类型自动转换成基本数据类型称为拆箱。
  Integer i=new Integer(10);
  int a=i;//10
     
    注意:自动装箱时,Integer i=12;默认调用Integer类中的valueOf方法。
      Integer包装类对-128~127之间的数据做了预先的包装,存放在常
  量池中,提高效率。【面试的难点】
              
              例如:
Integer i1=new Integer(12);
Integer i2 = new Integer(12);
System.out.println(i1==i2);//false

Integer i3=12;//自动装箱:int--->Integer(默认调用valueOf方法)
Integer i4=12;
System.out.println(i3==i4);//true  
    ⑤ 包装类在开发中的应用:【重点】
用于区分有效数据和无效数据,例如:0和null

2. String类 (位于java.lang中)
    ① 创建字符串的常用方式:【面试重点】
        a. String str1="hello";//只会在串池产生一个对象
b. String str2=new String("world");
   //会在内存中产生两个对象,一个在堆空间,另一个在串池中

② 常用的方法:
   a.获取字符串的长度:length()   
         String str="hello";  
str.length();
获取数组的长度:length:
             int[] a={1,4,5};
             a.length  
   b. String trim():去除字符串前后的空格。
           开发应用:
    String str4="123 ";
int a=Integer.parseInt(str4.trim());
System.out.println(a);

    ③  String对象是字面值常量,一旦创建内容不能更改,所有在串池中用于共享。
     
面试题目:
String s4="A"+"B"+"C";//编译器可知:"ABC",之后生成一个对象,是在串池中。
    
3. 可变长的字符串:(位于java.lang中)
StringBuffer:JDK1.0,线程安全,运行效率慢。
StringBuilder: JDK5.0,线程不安全,运行效率快。
常用方法:
append(参数);//字符串的拼接,相当于String的concat或是+
    常用的构造方法:
        StringBuilder()
StringBuilder(String str)

面试题目:StringBuffer和StringBuilder的区别??

          StringBuilder和 String 的区别?

eg:

package test_string;
/*
*String中的常用方法
*/


public class TestStringMethod {
public static void main(String[] args) {
String str="hello";
char c=str.charAt(3);
System.out.println(c);
/*Scanner sc = new Scanner(System.in);
System.out.println("输入一个字符:");
char c2=sc.next().charAt(6);
System.out.println(c2);*/

System.out.println(str.contains("lle"));//包含

char[] cs=str.toCharArray();  //将字符串转换成字符数组
for(int i=0;i<cs.length;i++){
System.out.println(cs[i]+"  "+i);
}

String s1=new String("world");
String s2=new String("world");

System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//比较内容,true


String str2="hellohello";
System.out.println(str2.indexOf("ll"));//获取字符串在当前字符串中出现的第一次的首字符的下标,如果不存在则返回-1.

System.out.println(str2.indexOf("ll", 4));//从下标4开始查找字符串

System.out.println(str2.lastIndexOf("ll"));//查找字符串在当前字符串中最后一次出现的下标

System.out.println("获取字符串的长度:"+str2.length());

String str3=" he llo ";
System.out.println(str3);
System.out.println(str3.trim());//去除字符串的前后空格

String str4="123 ";
int a=Integer.parseInt(str4.trim());
System.out.println(a);

String str5="hello-world-hello";

String[] sp=str5.split("-");

System.out.println(sp.length);
for(int i=0;i<sp.length;i++){
System.out.println(sp[i]);
}
String str6="ww/38/100.0";  //IO
String[] sp2 = str6.split("/");

String ss1="hello";
String ss2="wrold";

String ss3=ss1.concat(ss2);//字符串拼接,等价于 "+"
System.out.println(ss3);


//  "TestHello.java"是否以".java"结尾
String ss4="TestHello.java";
System.out.println(ss4.endsWith(".java"));

System.out.println(ss4.toUpperCase());//小写---》大写
System.out.println(ss4.toLowerCase());//大写---》小写
}
}


4. BigDecimal类
① 位置:java.math中
② 作用:精确表示、计算浮点数
③ 常用的构造方法:BigDecimal(String str)
④ 常用的功能方法:
a. BigDecimal add(BigDecimal bd):加法
   例如:BigDecimal r1=bd1.add(bd2);//加法:bd1+bd2
b. BigDecimal subtract(BigDecimal bd):减法
   例如:BigDecimal r2 = bd1.subtract(bd2);//减法:bd1-bd2
c. BigDecimal multiply(BigDecimal bd):乘法
   例如:BigDecimal r3 = bd1.multiply(bd2);//乘法:bd1*bd2
d. BigDecimal divide(BigDecimal bd1,int scal,RoundingMode mode):除法
   参数说明:BigDecimal bd1是分母的数据
                         int scal:精确到小数点后的位数
RoundingMode mode:取舍方式,常用的是四舍五入的方式:
                              BigDecimal.ROUND_HALF_UP
String包装是java.lang.String本身。在Java中,String是一个特殊的引用型,用于表示字符串。它是不可变的,即一旦创建就不能被修改。String提供了许多用于操作字符串的方法,比如拼接、截取、替换等。由于String是非线程安全的,所以在多线程环境下使用时需要注意线程同步的问题。\[1\] 与其他基本数据型的包装不同,String没有对应的包装,因为它本身就是一个引用型。所以,我们不需要使用包装来表示String型的对象。\[2\] 与包装中的equals方法一样,String的equals方法也是重写了Object中的equals方法,用于比较字符串的内容而不是地址。而"=="运算符比较的是引用变量的地址。当包装型和与之相对应的基本型进行"=="比较时,会先进行自动拆箱处理。\[3\] #### 引用[.reference_title] - *1* *2* [2022-07-22 第八小组 常竞文 String型和八大包装](https://blog.youkuaiyun.com/cjwtsl/article/details/126001449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java基础学习第七讲:Java中的String、常用包装](https://blog.youkuaiyun.com/u010611510/article/details/122348845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值