java小问题

学习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,
其他基本相同了。


******************************************************************************************************




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值