Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。在jsp开发中,Integer的默认值为null,所以用el表达式在文本框中显示时,值为null;而int默认为0,所以在el表达式在文本框中显示时,结果为0,所以int不适合作为web层的表单数据的类型(具体见下表)。
基本类型 | 大 小 | 最小值 | 最大值 | 封装类型 |
boolean | — | — | — | Boolean |
char | 16bits(2字节) | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8bits(1字节) | -128 | 127 | Byte |
short | 16bits(2字节) | -2^15 | +2^15-1 | Short |
int | 32bits(4字节) | -2^31 | +2^31-1 | Integer |
long | 64bits(8字节) | -2^63 | +2^63-1 | Long |
float | 32bits(4字节) | IEEE754标准 | IEEE754 | Float |
double | 64bits(8字节) | IEEE754 | IEEE754 | Double |
- 所有数值类型都有正负号,所以不要去寻找无符号的数值类型
- boolean类型所占用存储空间的大小没有明确指定,仅定义为能够取字面值true或false
short num = 1;num = num+1;有什么错?short num =1 ; num +=1;有没有错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型,这样子才可以正确的编译) short s1 = 1; s1 += 1;(可以正确编译)
&和&&的区别?以及用最有效率的方法算出2乘以8等于几
&和&&都可以作为逻辑运算符,表示逻辑与(and),当运算符两边的表达式结构都为true时,运算结果才为true,否则,只要有一方为false,则结果为false。
&&又叫做短路与,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于 if(!str=null&&!str.equals(""))表达式,当str为null时,后面的表达式不会执行,所以就不会出现NullPoninterException异常,如果将&&改为&,则会抛出空指针异常。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
2<<3应该是2*8的最有效率的运算方式。因为,将一个数左移n位,就相当于乘以了2的n次方,那么一个数乘以8只要将其左移3位即可。而位运算(<<)是cpu支持的,效率也就最高。
静态变量和实例变量的区别?
有static关键字修饰的变量叫做静态变量,因为其创建只是作为整个类而不是某个特定对象而存在,所以也叫做类变量。反之没有被static修饰的变量则叫做实例变量。
类变量和实例变量的区别:
- 一个static变量对每个类来说只有一份存储空;而非static变量(实例变量)则是对每个对象都有一个存储空间
- static变量即可以通过一个对象去定位它,也可以空过其类名直接引用;而对于非static变量则只能通过对象去引用
看下面这个例子:
class TestStatic{
static int i = 5;
}
现在创建两个TestSatic对象
TestStatic ts1 = new TestStatic();
TestStatic ts2 = new TestStatic();
这里 ts1.i 和 ts2.1 指向同一存储空间,因此他们具有相同的值5
如果要引用static变量i的话,既可以通过一个对象去定位,如同ts1.i;也可以通过其类名直接引用,如TestStatic.i,这个对于非静态变量时非法的
equals()和==到底有什么区别?
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
深入了解此题详见sandeziVIP早前的博文:从equals和==说起
Overloaded和Override的区别。Overloaded的方法是否可以改变返回值的类型?
overloaded表示重载,即在类中可以创建多个方法,它们具有相同的方法名,但具有不同的参数类型列表;Override表示重写,即子类中定义了与基类中具有相同名称和参数列表的方法,此时基类的中的该方法将被隐藏。
深入了解此题详见sandeziVIP的博文 :关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明
fianl,finally,finalize的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
PS:
本系列文章都遵循永久更新原则,发现新的东西都会及时加入,所以依旧希望大家积极讨论,不吝赐教。
另遇到问题较为繁琐且重要都会单独成文以说明之。