java 基础
来源:互联网 发布:男士内裤淘宝店铺名 编辑:程序博客网 时间:2024/06/08 16:55
1 equals()方法
java中的== :当比较对象的时候,比较的是对象的内存地址是否相同。
public boolean equals(Object obj) { return (this == obj); }
String类中的方法重写。
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }要设计equals方法需要遵循以下特性。
1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
5、 对于任何非空引用值 x,x.equals(null) 都应返回 false。
instanceof的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据
1) 对象域,使用equals方法 。
2) 类型安全的枚举,使用equals或== 。
3) 可能为null的对象域 : 使用 == 和 equals 。
4) 数组域 : 使用 Arrays.equals 。
5) 除float和double外的原始数据类型 : 使用 == 。
6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。
7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。
public boolean equals(Object obj) { return (obj instanceof Float) && (floatToIntBits(((Float)obj).value) == floatToIntBits(value)); }面试中经常需要比较String 类型
public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; //直接从常量池中取出 String s3 = new String("abc"); // 作为一个对象放在堆中 System.out.println(s1 == s2); //true System.out.println(s1 == s3); //false System.out.println(s1.equals(s3)); //true }
JVM为了提高性能和减少内存开销,内部维护了一个字符串常量池,每当创建字符串常量时,JVM首先检查字符串常量池,如果常量池中已经存在,则返回池中的字符串对象引用,否则创建该字符串对象并放入池中。
但与创建字符串常量方式不同的是,当使用new String(String str)方式等创建字符串对象时,不管字符串常量池中是否有与此相同内容的字符串,都会在堆内存中创建新的字符串对象。
2. final 关键字
final关键子有无法改变的意思,可以修饰类,方法,变量
final 类 不允许被继承,成员方法没有机会被覆盖,默认都是final的 如Java中的 public final class Math类
final 方法 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
final 对于常量来说,意味着值不能改变,例如 final int i=100。这个i的值永远都是100。但是对于变量来说又不一样,只是标识这个引用不可被改变,例如 final File f=new File("c:\\test.txt");那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。形象的比喻:一个女子定义了一个final的老公,这个老公的职业和收入都是允许改变的,只是这个女人不会换老公而已。
final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
public class MyTest {public static void main(String[] args) {System.out.println(new A().i); //7System.out.println(new A().i); //6}} class A{final int i = new Random().nextInt(10);}
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
public static double pow(double a, double b) { return StrictMath.pow(a, b); // default impl. delegates to StrictMath } public static final double E = 2.7182818284590452354;
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- Java基础
- java基础
- java 基础
- java基础
- Java基础
- Java基础
- Java基础
- JAVA基础
- JAVA基础
- JAVA基础
- java基础
- html css伪元素标签(二)灵活
- ES6数组扩展
- Gradle2.0用户指南翻译——第二章. 概述
- 进制转换(栈 && 16进制转换)
- 互动大屏,unity透明视频的实现方法:
- java 基础
- 7.31 A
- 数据冒险之栈应用(数制转换、括号匹配)
- phpunit实践笔记
- HDU1556:Color the ball(线段树区间更新单点求值)&&树状数组解法
- 变量类型和计算
- 2017第二次多校联合Regular polygon
- TypeError: 'module' object is not callable
- Java正则表达式