经常会看到一些基础问题,有些只记得是怎样,却忘记为啥是这样。所以在这里记录一下 一:Static 与non static 为什么静态成员不能访问非静态成员? 首先static的成员是在类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而非static的 成员是在创建对象的时候,即new 操作的时候才初始化的;先后顺序是先加载,才能初始化,那么加载的时候初 始化static的成员,此时非static的成员还没有被加载必然不能使用,而非static的成员是在类加载之后,通过new 操作符创建对象的时候初始化,此时static 已经分配内存空间,所以可以访问! 简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生
二:float f = 3.4是否正确 不正确 在java里面,没小数点的默认是int,有小数点的默认是 double; 编译器可以自动向上转型,如int 转成 long 系统自动 转换没有问题,因为后者精度更高 double 转成 float 就不能自动做了,所以后面的加上个 f;
三:==与equals 1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。