Java学习笔记---基本类型、运算优先级的一些知识整理

来源:互联网 发布:originpro8数据平滑 编辑:程序博客网 时间:2024/05/22 15:16

一、Java提供了8种原始数据类型,其对比见下表:



数据类型字节长度范围默认值包装类int4[-2147483648,2147483647]
(-2^31~2^31-1)0Integershort2[-32768,32767]0Shortlong8[-9223372036854775808,9223372036854775807]
(-2^63~2^63-1)0L或0lLongbyte1[-128,127]0Bytefloat432位IEEE754单精度范围0.0F或0.0fFloatdouble864位IEEE754双精度范围0.0Doublechar2Unicode[0,65535]u000Characterboolean1true和falsefalseBoolean以上基本类型可以分为以下四种类型:

  1. int长度数据类型:byte(8bit)、short(16bit)、int(32bit),long(64bit)
  2. float长度数据类型:单精度(32bit float),双精度(64bit double)
  3. boolean类型变量的取值:true 、false
  4. char数据类型:unicode字符(16bit)
笔试题举例:

1、下列表达式争取的是()

A. byte b=128;   B.boolean flag=null; C. float f=0.9239; D.a=2147483648L;

答案是D.  C不正确的原因是因为会造成精度损失。因为0.9239是double型。正确的赋值应该是0.9239f。

2、String是基本的数据类型吗?

答案不是。见上表。

3、赋值语句float f=3.4正确吗?

答案不正确,原因见第1题。


二、不可变类。

先看段代码:

class ImmutableClass{private Date d;public ImmutableClass(Date d){this.d=d;}public void printState(){System.out.println(d);}}public class Test{public static void main(String args[]){Date d= new Date();ImmutableClass im = new ImmutableClass(d);im.printState();d.setMonth(5);im.printState();}}


运行结果:

Sun Aug 03 17:41:47 CST 2015

Tue Jun 04 17:41:47 CST 2015

显然这不是我们想要的结果。正确的代码应该是什么样的呢?如下:

class ImmutableClass{private Date d;public ImmutableClass(Date d){this.d=(Date)d.clone();//去掉了引用关系}public void printState(){System.out.println(d);}public Date getDate(){return (Date)d.clone();}}public class Test{public static void main(String args[]){Date d= new Date();ImmutableClass im = new ImmutableClass(d);im.printState();d.setMonth(5);im.printState();}}


运行结果:

Sun Aug 03 17:41:47 CST 2015

Sun Aug 03 17:41:47 CST 2015

对象应用导致上面的代码出现了状态改变的问题。设计时,要注意这些问题。

三、运算符的优先级

优先级运算符结合性1. () [ ]从左向右2+(正) -(负) ++ -- ~!从左向右3* / %从左向右4+(加) -(减)从左向右5<< >>(无符号右移)>>(有符号右移) 从左向右6< <=  > >= instanceof从左向右7==  !=从左向右8&从左向右9|从左向右10^从左向右11&&从左向右12||从左向右13?:从左向右14=  += -= *= /=%= &= =|= ^= ~= <<= >>= >>>=从左向右举例:

public class Test{public static void main(String args[]){byte a=5;int b=10;int c=a>>2+b>>2;System.out.println(c);}}


答案:0,相当于 a>>12>>2,a右移12位显然是0,再右移2位依然是0.

四、Math中几个函数

  1. Math.floor():向下取整,举例:Math.floor(5.8)的值为5.
  2. Math.ceil:向上去整,举例:Math.floor(5.3)的值为6;
  3. Math.round():四舍五入,举例Math.round(5.4)的值为5;

五、==、equals和hashCode有什么区别?

  1. ==运算符迎来比较两个变量的值是否相等。
  2. equals和==运算符一样,比较的是引用。但是equals方法是可以覆盖的。即用户可以覆盖对象的equals方法。
  3. hashCode()方法返回对象在内存中地址转换成的一个int值,所以如果没有重写这个方法,所有对象的hashCode()方法都是不想等的。

1 0
原创粉丝点击