ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20220722—第八组—王凌霄—学习笔记

2022-07-25 20:01:43  阅读:125  来源: 互联网

标签:王凌霄 String int StringBuffer 20220722 笔记 字符串 类型 Integer


昨天意外的惊喜了属于,晚课领我们出去聚了次餐!

跟老师聊了很多也喝了许多,迷迷糊糊的但好像压力减轻了些

今天下午又开始了疯狂的学学学模式。

String类型与八大包装类型

String类型

String类型是引用数据类型,他的包路径是:java.lang.String
String类型在底层是一个char数组(Java9开始改为byte数组)
在Java中规定,双引号括起来的都是字符串对象,是不可变的,被放到字符串常量池中。

String对象的创建方式

1.使用双引号""括起来的都是String对象,这种方式创建的对象都是存放在字符串常量池中

2.使用构造方法创建String对象,这种方式创建的对象都是存放在堆内存中

String字符串存储原理

代码如下

内存图如下

通过内存图可以看出使用双引号括起来的字符串都放到 String Table(字符串常量池) 中;使用构造方法创建的字符串都放到了堆内存中。
那么问题来了,在上面的程序中一共创建了多少个String对象?

知道了程序的内存结构,我们来分析一下下面的程序

对以上代码的输出结果为

因为"=="运算符比较的是变量的值,而引用数据类型中存放的值都是对象的内存地址,通过内存图我们可以看出

str1(0x111) == str2(0x111) ----> 内存地址相同,结果为true
str4(0x555) == str5(0x666) ----> 内存地址不相同,结果为false
str1(0x111) == str4(0x555) ----> 内存地址不相同,结果为false

String类型常用方法

比较

获取

转换

String类还有一个静态方法String.valueOf(多类型重载),当该方法参数为Object是会调用该Object的toString()

字符串的拼接

使用字符串连接符"+"进行拼接

由于字符串是不可变的,所以在每次拼接后都会产生新的字符串,这样会占用大量的字符串常量池内存,造成空间浪费。
使用String实例方法concat(String)
调用concat()拼接字符串,方法内部代码执行会产生一个新的String对象
使用StringBuffer或StringBuilder
使用StringBuffer或StringBuilder追加内容,如果追加后不超出StringBuffer或StringBuilder的容量,那么并不会产生新的对象

StringBuffer和StringBuilder

String与StringBuffer区别:
String和StringBuffer底层都是数组(Java9之前是char数组,Java9(包括9)之后是byte数组。),String底层的数组被final修饰,StringBuffer底层的数组没有被final修饰,所以StringBuffer可以扩容,String不能进行扩容


StringBuffer与StringBuilder区别
StringBuffer中方法都被synchronize关键字修饰,表示在多线程环境下运行时安全的,而StringBuilder中的方法没有被synchronize关键字修饰,所以StringBuilder时非线程安全的。 

八大包装类型 

为什么要使用包装类型?

在调用方法时,若方法参数是引用数据类型(Object类型),那么使用基本数据类型是无法传参进去的,所以需要包装类间接传参。

八种基本数据类型对应的八种包装类型都是什么?

八种包装类常用的属性和方法(以Integer为例)

因为八种包装类的方法基本相似,所以通过学习Integer的常用方法可以对其他包装类照葫芦画瓢。

属性

public static final int MIN_VALUE;  -------> 获取int类型的最小值

public static final int MAX_VALUE; -------> 获取int类型的最大值

构造方法

public Integer(int);   -------> 通过一个int类型数据创建一个Integer对象

public Integer(String); -------> 通过一个String类型的数据创建一个Integer对象

 如果构造方法中传入的实参是String类型,在程序运行时可能会出现数值格式化异常——NumberFormatException

实例方法

public int intValue();    -------> 将当前Integer类型转换成int类型

public float floatValue(); -------> 将当前Integer类型对象转换成float类型

对于所有的Number类型对象,都可以任意转换成相应的基本数据类型(byte,short,int,long,float,double) 

静态方法

手动装箱与手动拆箱

自动装箱与自动拆箱(JVM5新特性)

包装类使用算数运算符(+ - * / %)进行算数运算时都会执行自动拆箱动作

整数型常量池

在Java中为了执行效率,在类加载时刻会在方法区中会声明并初始化一个长度为256的Integer静态常量数组,其中存储了范围在[-128,127]中的Integer对象,我们将这个Integer数组为称作整数型常量池

Integer面试题

输出结果为

Stirng、Integer、int类型相互转换

 

标签:王凌霄,String,int,StringBuffer,20220722,笔记,字符串,类型,Integer
来源: https://www.cnblogs.com/wlx7/p/16518624.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有