(1)equals方法比较内存地址
* a: Object类中的equals方法
* 用于比较两个对象是否相同,Object类中就是使用两个对象的内存地址在比较。 * Object类中的equals方法内部使用的就是==比较运算符。
(2): 重写equals方法
* a: 开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较 * b: 在开发经常需要子类重写equals方法根据对象的属性值进行比较。 * c: ==号和equals方法的区别 * ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值 * equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法, equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
(3) 重写toString方法
* a: 为什么要重写toString方法 * toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。 * 由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 * Object类中的toString的核心代码 getClass().getName() + "@" + Integer.toHexString(hashCode()) * 由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。
(4) String类的概念和不变性 * a:String类 * API中的String类的描述,发现String 类代1表字符串 * Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 * 字符串是常量,在创建之后不能更改 * 其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。 * 源码分析,String类底层采用的是字符数组:
private final char value[]
private 修饰说明value只能在String类内部使用,而且又没有提供get方法,所以外部无法获取value数组,就无法改变数组中元素的值
final修饰说明value是常量,一旦创建,就不能被改变,value一旦被初始化成某个数组,将永远指向这个数组,不可能再指向其它的数组了
(5) String类创建方式和比较
* a: 创建对象的数量比较
* String s3 = "abc";
* 在内存中只有一个对象。这个对象在字符串常量池中 * String s4 = new String("abc"); * 在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
(6) A:String类的其他方法
* a: 方法介绍
* int length(): 返回字符串的长度
* String substring(int beginIndex,int endIndex): 获取字符串的一部分
* String substring(int beginIndex): 获取字符串的一部分
* boolean startsWith(String prefix): 判断一个字符串是不是另一个字符串的前缀,开头
* boolean endsWith(String prefix): 判断一个字符串是不是另一个字符串的后缀,结尾
* boolean contains (String s): 判断一个字符串中,是否包含另一个字符串
* int indexOf(char ch): 查找一个字符,在字符串中第一次出现的索引,被查找的字符不存在,返回-1
* byte[] getBytes(): 将字符串转成字节数组,此功能和String构造方法相反,byte数组相关的功能,查询编码表
* char[] toCharArray(): 将字符串转成字符数组,功能和构造方法相反
* boolean equals(Object obj): 方法传递字符串,判断字符串中的字符是否完全相同,如果完全相同返回true
* boolean equalsIgnoreCase(String s): 传递字符串,判断字符串中的字符是否相同,忽略大小写
网友评论