常用类——包装类

包装类

简介

1.Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。
数值型包装类都继承至Number,而字符型和布尔型继承至Object。

2.包装类对象的初始值为null(是一个对象)Java中除了float和double的其他基本数据类型,都有常量池

用法

byte,short,long,boolean,double,float ==> 首字母大写 int ==> Integer (数值型包装类用法大同小异)

char ==> Character

基本数据类型与包装类之间的转换

装箱:基本数据类型转换为包装类

拆箱:包装类转换为基本数据类型

注意⚠️:

在java5之后,引入了一种新特性,自动装箱和自动拆箱。
自动装箱:基本数据类型自动转换成包装类。
自动拆箱:包装类自动转换成基本数据类型。
不再调用Number中的方法,而是直接写即可,方便编程。

装箱(基本数据类型 -(转换为)->引用数据类型)

以Integer举例:

方式一:通过构造方法创建包装类对象(JDK9已过时,不推荐使用)

Integer i3 = new Integer(3);
//此方法已经过时,现在用的自动装箱
//注意: 如果传入非数字字符串,则抛出异常:java.lang.NumberFormatException

方式二:自动装箱

Integer i3 =3;

拆箱(将引用数据类型--(转换为)-> 基本数据类型)

方式一:通过调用intvalue()方法

int retValue = i3.intValue();

方式二:自动拆箱

int retValue = i3;

Integer自动装箱的底层原理:

首先明确== 永远判断的都是两个对象的内存地址是否相同。


        Integer i1 = new Integer(3);
        //注意: 如果传入非数字字符串,则抛出异常:java.lang.NumberFormatException
        Integer i2 = new Integer("3");
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i1 == i2);//false
        System.out.println(i1.equals(i2));//true
       // 因为i1和i2是两个引用,他们虽然指向的值相同,但是他们中保存的地址却不相同。
        Integer i3 = 3;
        Integer i4 = 3;
        System.out.println(i3);
        System.out.println(i4);
        System.out.println(i3 == i4);//true
        System.out.println(i3.equals(i4));//true
       /**难道关于==的说明出了问题?
       不是!== 永远判断的都是两个对象的内存地址是否相同!
       那么我们就可以知道,其实这两个引用(i3和i4)存的是同一块内存地址!*/

3.结论:

java中为了提高程序的执行效率将[-128到127]之间所有的包装对象提前创建好,放到了一个方法区的“整数型常量池”当中了那么只要是用这个区间的数据就不需要再new了,直接从整数型常量池当中取出来,可以类比于String的字符串常量池一样。大大提高了效率。

常用属性

每一个包装类中都定义了两个常量用来表示当前类型的最大值与最小值(Boolean除外)

int maxValue = Integer.MAX_VALUE;
int minValue = Integer.MIN_VALUE;

数值型包装类常用方法

数值型包括:整数类型和浮点数类型,它们的包装类方法大同小异。

以Integer举例:

decode()

作用是将 String -转换-> int

该方法把字符串转换成数字,字符串必须是数字的,否则转换失败.

注意以下方法的真正返回类型,但是因为int和Integer之间存在自动解封箱概念,所以,可以互通

Integer decode = Integer.decode("123");
System.out.println(decode);

parselnt()

作用是将 String -转换-> int

当接受一个字符串时,返回该字符串对应的int值 。

当接受一个字符串和一个int时,返回该字符串以相应进制转换之后的int值。

static int parseInt(String s)
//String s : 这将返回一个整数(仅限十进制)
static int parseInt(String s, int radix)
//String s ,int radix: 这将返回一个整数,给定十进制、二进制、八进制或十六进制(基数分别等于 10、2、8 或 16)数字的字符串表示形式作为输入。
static int parseInt(String 123, int 16);//16进制的123转换为10进制后返回一个整数

valueOf()

valoeOf(int i)

该方法接受一个基本类型的值,返回装箱之后的包装类对象

valueOf(String)

该方法接受一个字符串,返回该字符串转换后的对应的基本类型装箱之后的包装类对象

valueOf(String,int)

该方法接受一个字符串和一个整型,字符串是待转换的数字,整型是该字符串的进制形式。返回转换之后的基本类型的十进制对应的装箱之后的包装对象。

parselnt()和valueOf()区别

valueOf方法返回的是一个包装类对象 而parseXXX方法返回的是一个基本类型。

String int Integer之间互相转换

⚠️!!!!!技巧: 数字加上空字符串会转换成字符串类型

String --> int
int i1 = Integer.parseInt("100"); // i1是100数字
System.out.println(i1 + 1); // 101

int --> String
String s2 = i1 + ""; // "100"字符串
System.out.println(s2 + 1); // "1001"

int --> Integer
自动装箱
Integer x = 1000;

Integer --> int
自动拆箱
int y = x;

String --> Integer
Integer k = Integer.valueOf("123");

Integer --> String
String e = String.valueOf(k);

compare()/compareTo()

比较方法(用法不同,结果一样)

1.若两个值相等,则返回 0
2.若调用的对象的数值小于anotherInteger的数值则返回负值
3.若调用的对象的数值大于anotherInteger的数值返回正值     
//1.比较方法,返回-1,0,1 
        int compareTo = i3.compareTo(i4);
        System.out.println(compareTo);
//进行区分
        //比较方法,返回-1,0,1
        int compare = Integer.compare(i3, i4);
        System.out.println(compare);

equals()

判断是否相等

注意⚠️:
Integer b1=new Integer(1);
Integer b2=new Integer(1);
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1==i2); //true 这里i1和i2是同一个对象创建出来的
System.out.println(b1==b2);//false 这里要比较两个数的地址
System.out.println(b1.equals(b2)); //true这里只比较数值大小

进制转换

进制转换方法
String toBinaryString = Integer.toBinaryString(7);二进制
String toOctalString = Integer.toOctalString(8);八进制
String toHexString = Integer.toHexString(16);十进制

字符型包装类常用方法

char--->Character

常用方法

isLetter()

1.判断字符是否是字母,字母不是只有英文字母

boolean letter = Character.isLetter(c1);

isDigit()

2.判断字符是否是数字

 boolean digit = Character.isDigit(c2);

isWhitespace()

3.判断字符是否是空白

boolean whitespace = Character.isWhitespace(c4);

isUpperCase()/isLowerCase()

4.判断大小写

 boolean upperCase = Character.isUpperCase(c1);
 boolean lowerCase = Character.isLowerCase(c2);

toUpperCase()/toLowerCase()

1.将字符串中的字母全部转换为小写,非字母不受影响。

2.将字符串中的字母全部转换为大写,非字母不受影响

String str="abcdef 我 ghijklmn";
System.out.println(str.toLowerCase());    // 输出:abcdef 我 ghijklmn
System.out.println(str.toUpperCase());    // 输出:ABCDEF 我 GHIJKLMN

JDK11API

posted @ 2022-03-24 17:21  JanoCode  阅读(96)  评论(0)    收藏  举报