Java基础知识总结(11)

在Java中基本数据类型不具有对象特征的


没有属性和方法,没法对象化交互

包装类的产生就是为了解决基本类型这样的问题

通过包装类可以让基本类型拥有属性和方法,可以对象化交互


注意一下打钩的两个字不一样


所有的包装类都是final继承的


所有的数值型都是继承Number类的


bool和char不是数字所以继承了Object



装箱:基本数据类型   →  包装类

拆箱:包装类   →    基本类型的值



装箱:1自动装箱


2手动装箱



拆箱:

    1 自动拆箱

    

2.手动拆箱

    


基本类型和字符串转换

    

    字符串转换基本类型

1 包装类的parse方法

    

2 valueOf方法  基本数据类型和包装类之间的装箱操作

包装类和基本数据类型之间存在自动拆箱操作

 先将字符串转换为包装类,再自动拆箱完成转换


基本数据类型的初始值


默认初始值:

    如果是包装类,则是null


1.new了两次,指向不同给的空间所以不一样

2.自动的拆箱

3.编译器实际上执行了


Java提供了类似于常量素组的缓存区,对象池如果传进来参数-128<参数<127就是直接拿来

最后一个,不在-128<参数<127所以不在这个范围内 ,必须new一个


除了Float和Double都是常量池概念


字符串:

String

创建String对象三种方式

String s1 = "jhkj";

String s2 = new String();     创建了空的字符串对象

String s3 = new String("jhkj");



String str1 = "jhkj";

String str2 = "jhkj";

String str3 = new String("jhkj");

System.out.println("str1和str2的内容相同"+(str1.equals(str2)));

System.out.println("str1和str3的内容相同"+(str1.equals(str3)));


System.out.println("str1和str2的地址相同"+(str1==str2));

System.out.println("str1和str3的地址相同"+(str1==str3));


我们内存里有栈,常量池 和堆


String str1 = "jhkj";

在栈中生成str1引用  常量池生成"jhkj"

str1指向"jhkj"

String str2 = "jhkj";  

栈生成str2引用  常量池已经有"jhkj"不会生成

直接把str2指向"jhkj"


String str3 = new String("jhkj");

在栈生成str3引用,堆创建new String("jhkj");

栈指向堆


如果String str4 = new String("jhkj");

在栈生成str4引用,堆创建新的new String("jhkj");

栈指向堆


String对象的不可变性:String对象一但创建则不能修改,是不可变的

所谓的修改其实是创建了新的对象所指向的内存空间不变

String s1 = "jh";

s1 = s1 + "kj";

我们用s1 + "kj"

实际上是常量池生成了新的字符串 "jhkj",在执行赋值 s1指向"jhkj"

"jh"没有指向他就被废弃掉了


StringBuilder

String和StringBuilder区别

String具有不可变现而StringBuilder不具备

当频繁操作字符串使用StringBuilder


当用String频繁操作会产生很多中间变量,也会产生很多在常量池中废弃的数据

StringBuilder可以避免这种情况发生

另外有个StringBuffer

StringBuilder和StringBuffer二者基本相似

StringBuffer是线程安全的,StringBuilder则没有,所以StringBuilder性能更高

大部分我们处理字符串都是单线程,线程安全主要是多线程情况下StringBuilder更好


四个构造方法

StringBuilder()创建了能容纳16个字符的空间 的空字符串

第二个:等同与String类

第三个:容量

第四个:用的最多,穿字符

还有很多方法 官网查



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页