栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java03——包装类,字符串类,枚举类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java03——包装类,字符串类,枚举类

包装类,字符串类,枚举类
    • 一、包装类
      • 1.什么是包装类
      • 2、为什么需要包装类
      • 3、自动装箱
      • 4、自动拆箱
      • 5、包装类与封装的渊源
      • 6、常见应用
    • 二、字符串类
      • 1、String
        • (1)定义一个字符串
        • (2)被final修饰的String类
        • (3)intern()
        • (4)经典面试题
        • (4)String类的常用方法
      • 2、BufferedString
        • (1)int length()
        • char charAt(int)
        • (2)boolean isEmpty()
        • boolean equals(Object)
        • boolean equalsIgnoreCase(String)
    • 三、枚举类

一、包装类 1.什么是包装类

每个基本数据类型都有其对应的包装类(boolean没有)

Byte
Character
Short
Integer
Long
Float
Double
2、为什么需要包装类

包装类其实就是基本数据类型经过封装后的类。
包装类提供了很多方法,方便我们调用。
在后面学到的泛型里,只支持对象,而基本数据类型没有对象,因此我们需要包装类。
一提到包装类,就自然而然的想到了装箱与拆箱。自动装箱和自动拆箱都是jdk5以后实现的,现在我们使用基本都是使用自动装箱和拆箱。
可以发现,包装类中有很多方法都是被static修饰的,可以通过类名直去调用,同时也提供了一些常量。

3、自动装箱

基本数据类型–>引用类型

Integer i = 100;	//自动装箱

有自动装箱就有一个概念叫做手动装箱

int i = 10;			//手动装箱
Integer integer = Integer.valueOf(i);
4、自动拆箱
Integer integer = 10;	//自动装箱
int i = integer;		//自动拆箱

手动拆箱

Integer integer = 10;
int i  = integer.intValue();		//手动拆箱
5、包装类与封装的渊源



可以发现拆箱和装箱的方法其实和封装的get方法和set方法很相似。
而整形的数据量是有限的,

最大值是127,最小值是-128,这些常量都定义在了缓存里,会从缓存里取。

Integer i1 = 30;
Integer i2 = 30;

这里的i1和i2指向同一个对象,因为他们本质都是cache里的30。

6、常见应用
  1. 数值型装字符串型
    这个很常用
String s = Integer.toString(10);		//数值转字符
int i = Integer.parseInt(s);			//字符转数字
  1. 进制转换
    public static String toBinaryString(int i) {
        return toUnsignedString0(i, 1);
    }
二、字符串类 1、String (1)定义一个字符串
public class T {
    public static void main(String[] args) {
        String s1 = "String";
        String s2 = new String("String");
        System.out.println(s1 == s2);		//	结果为false
    }
}

s1和s2的值都是“String‘,但是他们指向不同的对象。
这两种方式创建字符串,他们的区别是
s1指向的是方法区中的常量池,我们在创建s1的时候,会先查看常量池里是否有”String“,如果没有,会在常量池里创建一个”String“,然后指向他;如果常量池里已经存在了”String“,那么会直接指向他。
而s2不管常量池里有没有,他会创建一个空间,里面的值是”String“。

public class T {
    public static void main(String[] args) {
        String s1 = "String";
        String s2 = "String";
        System.out.println(s1 == s2);			//true
        String s3 = new String("String");
        String s4 = new String("String");
        System.out.println(s3 == s4);			//false
        System.out.println(s2 == s3);			//false
    }
}

只要是new出来的,肯定就是一个全新的对象了。

(2)被final修饰的String类


String一经创建赋值,就不可修改
String被final修饰,所以这个类不可被子类继承,不可被修改。
在String的方法中,有一些方法也被final修饰,这些方法是不可被子类重写的,因为String不可能拥有子类的,所以不用担心方法被修改的问题。

public class T {
    public static void main(String[] args) {
        String s1 = "String";
        String s3 = new String("String");
        String s4 = new String("String");
        s1 = "hello";
        s3 = s4;
    }
}

看上去字符串的量都被修改了,为什么还说字符串不能被重新赋值呢?
其实确实是没有重新赋值的,这个叫s1的东西原来他的引用指向了方法区的常量池里的”String“,现在他只是在方法区里的常量池里开辟了一个新的空间,里面放了”hello“,我们现在让这个s1指向了这块新开辟的空间而已。之前的”String“还存在,没有被改变,如果以后没有任何引用指向他,而且不再被调用,他就会被java的垃圾回收机制回收了。
同样的s3指向了s4指向的空间。

(3)intern()


如果一个字符串在常量池中出现过,返回该字符串,如果字符串为空或者不存在常量池里,那么返回空字符串。

(4)经典面试题
public class T {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        String s3 = "hello" + "world";
        String s4 = s1 + "world";
        String s5 = s1 + s2;
        String s6 = (s1 + s2).intern();
    }
}

s3在编译阶段,jdk会对代码进行优化,把他变成

String s3 = "helloworld";

s4和s5
通过设置断点debug可以发现,他会先创建s1这个对象(s1已经创建过了,所以他会找到他)。之后我们可以发现他的底层是通过append连接的。只要右边有变量,就会在堆中new一个对象。(底层用到了StringBuild类)

(4)String类的常用方法 2、BufferedString (1)int length()

返回字符串的长度

char charAt(int)

获取对应索引位置的字符

(2)boolean isEmpty()

判断字符串是否为空

boolean equals(Object)

判断两个字符串的内容是否一致

boolean equalsIgnoreCase(String)

判断两个字符串内容是否一致,不考虑大小写

三、枚举类
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号