java关键字

2020-02-25  本文已影响0人  与搬砖有关的日子

1、抽象类和接口的对比

image

2、 Equals()方法

普遍回答是==比较的是内存地址,equals比较的是值。但不是很标准。
Object对象的equals的定义是这样的:


image

所以在Object中==和equals是没有任何区别的,是用来比较两个对象的引用是否相等,即是否指向同一个对象。

但在String中,重写的equals方法是这样定义的:

image

String类对equals方法进行了重写,用来比较指向的字符串对象存储的字符串是否相等。其他的一些诸如Double,Date,Integer等都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。
对于==,如果作用于基本类型的变量,则直接比较其存储的值是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。
对于equals方法,注意:equals方法不能作用域基本数据类型的变量。如果没有对equals方法进行重写则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等对equals方法进行了重写的话,比较的是所指向的对象的内容。

3、Integer和int的区别

原始类型:byte,boolean,short,char,int,float,double,long
包装类型:Byte,Boolean,Short,Character,Integer,Float,Double,Long
Java基本类型占用的字节数:
1字节:byte,Boolean,byte范围是-128-127
2字节:short,char
4字节:int,float
8字节:long,double
1字节(byte)=8位(bits)

4、Static

Java中static关键字不会改变成员的访问权限。Static不允许用来修饰局部变量。
在第一次创建一个类的对象或者第一次调用一个类的静态属性和方法时加载静态类。
类加载期间如果发现有静态属性就给对应的静态属性分配内存空间并赋值(在声明静态变量时不一定赋值),今后调用该类的静态属性时虚拟机会直接寻找该属性先前已经分配的内存空间地址,然后调用其值。基本数据类型的静态变量存在池里面。

5、String,StringBuffer和StringBuilder

String字符串常量,StringBuffer字符串变量(线程安全),StringBuilder(非线程安全)。
大部分情况StringBuilder> StringBuffer > String
String用final修饰是不可变的对象,因此在每次对String类型进行改变的时候都等于生成了一个新的String对象,所以它是线程安全的,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的。
而StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。
所以字符串对象经常改变的情况下一般推荐使用StringBuffer。
大部分情况StringBuffer> String
StringBuffer上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。
StringBuilder不能保证同步,该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。
String name = ”I ” + ”am ” + ”chenssy ” ;在JVM眼中就是String name = ”I am chenssy ”

6、String(原文链接)

7、final

8、BigDecimal

BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。

计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。
注意:

BigDecimal a =new BigDecimal("1.22");
System.out.println("construct with a String value: " + a);
BigDecimal b =new BigDecimal("2.22");
a.add(b);//a还是1.22
BigDecimal c = a.add(b);
上一篇下一篇

猜你喜欢

热点阅读