2024年java基础498讲

java基础498讲其实 Java 还有很多其他的基础知识 在日常工作技术撕逼中也是经常被讨论的问题 深克隆与浅克隆 在 Java 中创建对象有两种方式 一种是 new 操作符 它创建了一个新的对象 并把对应的各个字段初始化成默认值 另一种是用 clone 方法 基于已有的对象创建一个新的对象 此时会根据原有的对象各个字段赋值给新的对象 如果对象的字段都是基础类型 没有什么问题 但是如果字段是对象

大家好,我是讯享网,很高兴认识大家。



其实Java还有很多其他的基础知识,在日常工作技术撕逼中也是经常被讨论的问题。

深克隆与浅克隆

在Java中创建对象有两种方式:

一种是new操作符,它创建了一个新的对象,并把对应的各个字段初始化成默认值;

另一种是用clone方法,基于已有的对象创建一个新的对象,此时会根据原有的对象各个字段赋值给新的对象。

如果对象的字段都是基础类型,没有什么问题,但是如果字段是对象,那么其实clone的时候复制的仅仅是对象的引用而已。

上面就是深克隆与浅克隆的区别。

在我们日常的开发中,如果涉及到克隆,就需要注意深克隆和浅克隆的区别。

如果想要实现深克隆,可以实现Cloneable接口,并且重写clone方法,然后一定要把涉及到深克隆问题的内部对象重新克隆一份。当然如果这个对象里面还有其他的对象,那么仍然是有问题的。

代码语言:javascript
复制
参考 详解Java中的clone方法 -- 原型模式

序列化与反序列化

序列化就是把对象形成字节流,反序列化就是通过字节流创建对象。它主要用于两个场景:

  1. 对象的持久化
  2. 对象的网络传输

实现起来很简单,只要实现Serializable接口即可。

参考 对Java Serializable(序列化)的理解和总结

String源码

有一些Java经验的都应该了解,String字符串是不可变的,即:

代码语言:javascript
复制
讯享网

其实他们俩是两个对象。这是因为在String代码中,有两个变量,char的value数组,和hash值,但是它俩都是private final类型,也就是说一旦创建就无法修改了。

代码语言:javascript
复制
 
 

而当调用各种substring,replaceall等方法的时候,其实也是创建了新的string对象。

不过它并非不可修改的,也可以通过反射的方式修改内容。

参考 Java中的String为什么是不可变的? -- String源码分析

Java数组

关于数组,就有一个比较有意思的问题——数组是对象么?其实在Java中所有的东西都是对象,都继承了Object类。只不过为了方便实用,有提供了Object[]的引用方法。

详细的可以参考这篇文章 Java数组特性

Java数据类型

Java包含了八种基本数据类型。六种数字类型,一种字符类型,一种Bool类型。

基本数据类型

包装数据类型

位数

最小值

最大值

默认值

byte

Byte

8位

-2^7

2^7-1

0

short

Short

16位

-2^15

2^15-1

0

int

Integer

32位

-2^31

2^31-1

0

long

Long

64位

-2^63

2^63-1

0L

float

Float

32位

1.4E-45

3.E38

double

Double

64位

4.9E-324

1.23157E308

boolean

Boolean

1位

java基础498讲

char

Char

16位

数据类型可以自动转换

低 ---------------------------------------------> 高

小讯
上一篇 2024-12-28 07:46
下一篇 2024-12-30 12:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/8770.html