Java学习笔记---基本类型、运算优先级的一些知识整理
来源:互联网 发布:originpro8数据平滑 编辑:程序博客网 时间:2024/05/22 15:16
一、Java提供了8种原始数据类型,其对比见下表:
(-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以上基本类型可以分为以下四种类型:
- int长度数据类型:byte(8bit)、short(16bit)、int(32bit),long(64bit)
- float长度数据类型:单精度(32bit float),双精度(64bit double)
- boolean类型变量的取值:true 、false
- 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中几个函数
- Math.floor():向下取整,举例:Math.floor(5.8)的值为5.
- Math.ceil:向上去整,举例:Math.floor(5.3)的值为6;
- Math.round():四舍五入,举例Math.round(5.4)的值为5;
五、==、equals和hashCode有什么区别?
- ==运算符迎来比较两个变量的值是否相等。
- equals和==运算符一样,比较的是引用。但是equals方法是可以覆盖的。即用户可以覆盖对象的equals方法。
- hashCode()方法返回对象在内存中地址转换成的一个int值,所以如果没有重写这个方法,所有对象的hashCode()方法都是不想等的。
1 0
- Java学习笔记---基本类型、运算优先级的一些知识整理
- Java 运算符知识整理 学习笔记
- 【学习笔记】一些细碎android知识整理
- 【学习笔记】关于变量类型的一些知识
- Java运算符优先级整理
- 变量、JAVA基本类型 、 运算符和表达式的学习
- Java基本类型学习笔记
- Java基本类型学习笔记
- [学习笔记]java SE 学习Vector的一些知识
- java的运算优先级和字符串的类型转换
- 一些运算符号的优先级
- java要整理的一些知识
- 关于java锁的一些知识整理
- Java学习笔记----一些常用却不清楚的知识
- shell学习。一些基本的知识。
- 一些基本的java技术的知识
- java内部类 -- 基本的一些知识
- java学习笔记之---java基本类型
- 命令处理、getopt_long函数说明
- C#进程同步之管道通信
- 图的环路问题
- 类的注册与动态生成
- C++中cin和cin.getline函数连用的问题
- Java学习笔记---基本类型、运算优先级的一些知识整理
- Target-Action(View实现button的效果)
- 【HDU1087】【Super Jumping! Jumping! Jumping!】
- 结构体4
- Java 反射机制原理
- Linux 无法开机 显示 an error occurred during the file&nb
- const用法详解
- HDU1.1.2 A+B for Input-Output Practice (II)
- 数据结构与算法分析 java语言描述 课后题1.6