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

String和Object

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

String和Object

String概述
String 被声明为 final,因此它不可被继承。
在 Java 8 中,String 内部使用 char 数组存储数据。
在 Java 9 之后,String 类的实现改用 byte 数组存储字符串,同时使用 coder 来标识使用了哪种编码。

常用API

//比较字符串的,比较的是字符串内容 ,返回的是boolean
boolean equals(Object anObject)
//根据索引获取对应的字符
char charAt(int index)
//获取字符串长度    
char[] toCharArray()
//将指定的字符串连接到该字符串的末尾。返回的是一个新串
int indexOf (String str) 
//截取,返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex
String substring (int beginIndex, int endIndex)
//将前面的字符串替换成后面的字符串
String replace (CharSequence target, CharSequence replacement)
//将此字符串按照给定的规则拆分为字符串数组,比如按“,”切分,注意按“.”切分需要加“\”转义
String[] split(String regex)
//判断字符串是否是以我们填写的字符串结尾
boolean endsWith(String suffix)
//判断字符串是否是以我们填写的字符串开头
boolean startsWith(String prefix):

new String(“abc”)会创建两个对象(前提是常量池中没有“abc”字符串对象)
首先“abc”是字符串,会在字符串常量池中创建这个对象,指向“abc”这个字符串字面量。
而使用new的话会在堆空间中创建这个对象。

StringBuffer StringBuilder的区别
可变性
String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。

String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。
如果要操作少量的数据用 = String
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

Object常用的API
hashCode()
equals
clone()
toString
notify()
notifyAll()
wait(long timeout)
对于基本类型, == 判断两个值是否相等,基本类型没有 equals() 方法。
对于引用类型,== 判断两个变量是否引用同一个对象,而 equals() 判断引用的对象是否等价(这
里的等价对于 String 来说是内容相同,对于其它对象来说,可以重写自己的 equals 方法进行定义,
否则使用的是 Object 的 equals 方法,底层实现一样是==)。

hashCode和equals
(1)HashCode介绍:hashCode()的作用是获取哈希码,又称为散列码,实际上是返回一个int型整数,来确定该对象在哈希表中的索引位置。hashCode()定义在JDK的java.object中,因此java中的所有类都包含hashCode()。
哈希表存储的是键值对(key-value),即可以通过键来快速的查找到对应的值。
(2)hashCode存在意义:以HashSet如何检查重复为例
当你把对象加入到HashSet中时,首先会计算该对象的hashcode值来判断对象加入的位置,同时还会与其他对象的hashcode值相比较,如果没有相同的hashcode值,hashset是假定没有重复的对象出现。如果有重复的hashcode值,那么就会调用equals()方法来检查hashcode值相等的两个对象是否真的相等,如果相同,hashset不会让该对象添加,如果不同,就会重新散列到其他位置。
(3)hashcode()与equals()的相关规定
如果两个对象相等,那么equals和hashcode一定相等。
如果两个对象有相同的hashcode值,那么也不一定相等。
因此equals()方法被覆盖时,hashcode也一定被覆盖,因此如果没有重写hashcode的话,那么一定不会相等。

一个好的代码具备什么特点?
(1)具有良好的可维护性
在原有的设计下能快速的修改添加代码,并且出现BUG的几率较小。
(2)具有良好的可读性
编码符合规范,有注释,并且长度适中
(3)可扩展性
在不改动或者少量改动原有代码的前提下,通过扩展增加新的代码
(4)灵活性,简洁性和可重用性
代码简单逻辑清晰,避免写重复代码

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

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

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