Java基础包装类详解

发布于:2022-12-30 ⋅ 阅读:(440) ⋅ 点赞:(0)

包装类

1. 为什么需要包装类

众所周知,我们Java语言的特性是面向对象。所以在Java中任何东西都是以而存在的,但是我们的基本数据类型,却不属于类。在一些应用的场景下,它限制了我们的使用。比如我们无法使用Object里的方法呀(因为任何类都继承自Object)。无法参与转型,泛型,反射等使用。Java的开发人员为了弥补这个缺陷,于是为我们的八大数据类型各种设计了一个包装类,将基本数据类型和一些方法包封装起来成为保证类,这在以后的数据库对应实体类中会体现。下面是八大基本数据类型对应的包装类。

基本数据类型 包装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

2. 包装类和基本数据类型的相互转换

装箱:基本类型–>包装类型

拆箱:包装类型–>基本类型

2.1 jdk5前是手动装箱和拆箱

2.1.1 手动装箱 int–>Integer
int n=100;
Integer integer=new Integer(n);
Integer integer1=Integer.valueOf(n);
2.1.2 手动拆箱 Integer–>int
int i=integer.intValue();

2.2 jdk5后,自动装箱和自动拆箱

2.2.1 自动装箱 int–>Integer
Integer integer = 100;
//底层使用的仍是Integer.valueOf(100);
2.2.2 自动拆箱 Integer–>int
int n = integer;
//底层使用的仍是intValue()方法

3 包装类型和String类型的相互转换

以 Integer 和 String 转换为例,其它类似:

3.1 包装类(Integer)->String

Integer i = 100;//自动装箱
//方式 1 
String str1 = i + "";
//方式 2 
String str2 = i.toString();
//方式 3 
String str3 = String.valueOf(i);

3.2 String -> 包装类(Integer)

String str4 = "12345";
Integer i2 = Integer.parseInt(str4);//使用到自动装箱 
Integer i3 = new Integer(str4);//构造器

4 Integer 类和 Character 类的常用方法

System.out.println(Integer.MIN_VALUE); //返回最小值 
System.out.println(Integer.MAX_VALUE);//返回最大值 
System.out.println(Character.isDigit('a'));//判断是不是数字 
System.out.println(Character.isLetter('a'));//判断是不是字母
System.out.println(Character.isUpperCase('a'));//判断是不是大写 
System.out.println(Character.isLowerCase('a'));//判断是不是小写 
System.out.println(Character.isWhitespace('a'));//判断是不是空格 
System.out.println(Character.toUpperCase('a'));//转成大写 
System.out.println(Character.toLowerCase('A'));//转成小写

5 Integer 类面试题总结

总结:new出来的一定是不同对象

存在基本数据类型的比较,那就是比较数值是否相等

在这里插入图片描述

如果值在-128~127之内那么是直接返回数组中的值,如果大于这个范围则会new一个新的Integer对象。

//示例一
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);//F
//示例二
Integer i3 = new Integer(128); 
Integer i4 = new Integer(128);
System.out.println(i3 == i4);//F
//示例三
Integer i5 = 127;//底层 Integer.valueOf(127)
Integer i6 = 127;//-128~127 
System.out.println(i5 == i6); //T 
//示例四
Integer i7 = 128;
Integer i8 = 128; 
System.out.println(i7 == i8);//F
//示例五 
Integer i9 = 127; //Integer.valueOf(127)
Integer i10 = new Integer(127); 
System.out.println(i9 == i10);//F
//示例六 
Integer i11=127; 
int i12=127; //只要有基本数据类型,判断的是值是否相同
System.out.println(i11==i12); //T
//示例七 
Integer i13=128; 
int i14=128; 
System.out.println(i13==i14);//T

6. String 类的理解和创建对象

  1. String对象用于保存 字符串,也就是一组字符序列
  2. 字符串常量对象是用双引号包括的字符序列例如:“hello”,“你好” 等
  3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。

在这里插入图片描述

6.1 String类的常用构造器演示

String s1 = new String(); 
String s2 = new String(String original);
String s3 = new String(char[] a); 
String s4 = new String(char[] a,int startIndex,int count)String s5 = new String(byte[] b)

6.2 创建String对象的两种方式

方式一:直接赋值 String s ="xiaolvbobo";
方式二:调用构造器 String s = new String("xiaolvbobo");

6.3 两种创建String对象的区别

  1. 方式一:先从常量池查看是否有"xiaolvbobo"数据空间,如果有,直接指向;如果没有则重现创建然后指向。s最终指向的是常量池的空间地址。
  2. 方式二:先在堆中创建空间,里面维护了value属性,指向常量池中的"xiaolvbobo"空间,如果常量池没有"xiaolvbobo",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。
6.3.1 测试题
String a=new String("abc");
String b=new String("abc");
System.out.println(a.equals(b));//T
System.out.println(a==b);//F

equals方法比较数值,ab的数据值都是"abc" 是相同的

但是a和b指向的是堆中的两个不同地址,所以a和b并不相等,只是a和b指向的堆地址中维护的value属性相同。

7. String 类的常见方法

常见的api调用,所见即所得

  • equals 区分大小写,判断内容是否相等
  • equalsIgnoreCase 忽略大小写的判断内容是否相等
  • length 获取字符的个数,字符串的长度
  • indexOf 获取字符在字符串中第一次出现的索引,索引从0开始,如果找不到返回-1
  • lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到返回-1
  • substring 截取指定范围的子串
  • trim 去前后空格
  • charAt 获取某索引处的字符,注意不能使用Str[index]这种方式

7.1 String 相关的其他方法

  • toUpperCase 转换成大写

  • toLowerCase 转换成小写

  • concat 拼接字符串

  • replace 替换字符串

  • split 分割字符串

  • compareTo 比较两个字符串的大小,如果前者大,则返回正数,后者大则返回负数,如果相等,返回0

  • toCharArray 转为char数组

7.1 String 相关的其他方法

  • toUpperCase 转换成大写

  • toLowerCase 转换成小写

  • concat 拼接字符串

  • replace 替换字符串

  • split 分割字符串

  • compareTo 比较两个字符串的大小,如果前者大,则返回正数,后者大则返回负数,如果相等,返回0

  • toCharArray 转为char数组

本文含有隐藏内容,请 开通VIP 后查看