为什么计算机设计补码进行存储?
原码只有加法没有减法,因此使用减法时会出现问题,因此引用了反码,而反码会出现正负0的问题(符号位不同)用两个编码实在浪费,因此出现了补码,补码计算后再转换为原码,这样0用00000000表示,之前出现问题的-0则不存在了。
byte类型127+1=-128?
byte为一字节8位,反码的存储范围为-127-127,补码的存储范围为-128-127,而计算机中数据用补码存储,0占据了一个正数的位置,0-127正好128个,-128--1也为128个,127+1超过了存储范围,计算结果为10000000,byte中即为-128。在eclipse中用两个byte类型的数值进行计算时会发生变量提升,byte类型的127+1会变为int类型的128,使用强制类型转换防止变量提升得到结果才为-128。
==和equals()方法的区别:
基本数据类型:只能使用==,用于判断值是否相等
引用数据类型:==用于判断地址是否相同
equals():如果是在object类里,equals方法中判断时使用的是==,比较的是地址;
但有些类如String类里,重新定义equals方法,先比较地址,如果地址不相同,然后再比较里边的内容是否相同。
局部变量和全局变量的区别
.class文件进入JVM中,所有方法存入方法区,如果不new对象想进行调用,就只有main方法和它调用的方法入栈后出栈,
堆内没有开辟内存空间,a(全局变量)和c(main方法中的局部变量)可以直接调用。new对象后对象入栈,
并在堆中给run方法开辟内存空间,调用run方法时在栈中开辟内存空间,run方法中的局部变量也存在栈中。
.java文件分为有main方法和没有main方法的文件,有main方法的直接调用文件main方法直接入栈,
没有main方法的new对象后调用方法才会入栈。
简述构造器的特征:
1.构造器与类同名
2.new对象时new 后边的方法即为构造函数
3.每个类中都有一个默认的不显示的无参构造器,在类中写一个构造器时则调用写的那个(覆盖掉默认的)
4.构造器无返回值,如果有返回值,即使方法名和类名相同也不是构造函数
5.类中有至少一个的构造函数