学习java中遇到许多小问题,
或许你们也有疑惑,
我查了些资料把我所找到的比较好的,来转载一下,里面也有我的idea:
如果有错的,望指正
****************************************************************************************************
1.instanceof
描述:我看的书上关于instanceof 就说是个实例运算符,也没有例子,最终也没明白,于是就请度娘出马了。
解:
instanceof是Java的一个二元操作符,
和==,>,<是同一品种。
它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。
我看到了一个非常好的例子:
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。
instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:
public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节}
在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。
***************************************************************************************************************
2.mod 与 %
描述:当时我看mod 取模,%取余,也有很多说这俩一样,后来才发现不是这样滴。。。
解:
通常取模运算也叫取余运算,他们都遵循除法法则,返回结果都是余数;
但是仔细看是不一样的:
1.取余
rem(3,2)=1
rem(-3,-2)=-1
rem(3,-2)=1
rem(-3,2)=-1
2.取模
mod(3,2)=1
mod(-3,-2)=-1
mod(3,-2)=-1
mod(-3,2)=1
由此可以看出,%和mod是有符号区别的!
当除数与被除数的符号相同时,%和mod的结果是完全相同的;当除数与被除数的符号不相同时,结果不同。
具体说,%结果的符号与被除数相同;mod结果的符号与除数相同。
**********************************************************************************************************************
3.String 与 StringBuffer
解:
在java中有3个类来负责字符的操作:
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer demo = new StringBuffer();
Ps:不能通过赋值符号对他进行赋值.
demo = "welcome to here!"; //error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.
向StringBuffer中赋值的时候可以通过它的append方法.
demo.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
*********************************************************************************************************************
3. if
描述:java 与 C++/C if 书上说有区别,但也没指名
解:
结构上基本没有区别,
只不过在if的条件判断中:
java是不能像C++那样用1或大于1表示true.用0表示false,
在java中只能用boolean类型的变量来表示true还是flase,
其他基本相同了。
******************************************************************************************************