您的位置:首页 > 编程语言 > Java开发

Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(三)

2007-02-10 09:03 1536 查看
五、Operators (运算符)

算符优先级:





1、算术运算符 + 、- 、 * 、/ 。关于/号,整数/整数 = 整数 。取余数用%,而浮点数/浮点数 = 浮点数。另外,整数除0会产生一个异常,而如果浮点数除于0,则可能得到无穷大或错误的值。
2、注意一点,就是在double类型进行运算的时候,有的机器会用80位来存中间的值,这样可能与64位算出来的不一样,所以可以用public static strictfp void main(String[] args)中的strictfp规定中间的数据也用64位来存放。所幸的是,这些机器在处理的时候只用于指数,而double类型发生溢出的可能性很小,所以两种差不多。
3、自加、自减运算符,给个例子吧。
int m = 7;
int n = 7;
int a = 2 * ++m; // now a is 16, m is 8
int b = 2 * n++; // now b is 14, n is 8
4、关系运算符: == , != , < , > <= , >=
5、逻辑运算符: && , || , !, 都是短路径优先的。
6、条件运算符:?: 如x < y ? x : y,返回x,y中的小的一个。
7、位运算符:& , | , ^ , ~ ,<< , >> , >>>。&、|,还有另外一个作用就是用于逻辑类型的变量进行逻辑判断的,但是它们不是短路径优先的。在移位运算符的时候,移动的位数是以32为模的,除非被移动的类型是long,则是以64为模的。比如1<<35 = 1<<3。
8、有很多关于数学的函数,包括Math.sqrt(double) , Math.pow(double ,double) , Math.sin, Math.cos , Math.tan , Math.atan
Math.atan2 , Math.exp , Math.log 和常数Math.PI , Math.E。
9、如果使用了import static java.lang.Math.*; ,则可以直接使用sqrt(double)。
10、在使用Math的时候,float运用的是本地的。如果要使用精确的值,请使用StrictMath。
11、类型转换





实线表示安全的转换,而虚线表示回丢失精度。
自动转换原则
1、如果有一个是double,都转换为double
2、如果有一个是float,都转换为float
3、如果有一个是long, 都转换为long
4、其他都转换为int
如果有丢失数据的情况,我们称为cast,必须写成
double x = 9.997;
int nx = (int) x; //nx = 9
如果要取最接近的用round
double x = 9.997;
int nx = (int) Math.round(x); // nx=10
有时如果在转换的过程有超出范围的情况,会出现一些很奇怪的数据。如(byte) 300 = 44.(学过二进制的话也没什么好奇怪的。)
boolean类型不能转换为任何类型,都可以用b ? 1 : 0。
12、优先级顺序
在Java中没有,号运算符。
13、枚举类型:
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };

Size s = Size.MEDIUM;

s只可以存上面列出的值,还有就是null。

六、String类型
1、Code Unit和Code Point
例如:string u = "/uD840/uDC08/u0041/uD835/uDD68"
主要有几个函数需要注意:
length():返回的是Code Unit的长度,上面返回5
codePointCount():返回的是Code Point的长度
int cpCount = greeting.codePointCount(0, greeting.length()); //得到code Point的长度 ,上面返回3

charAt(int index):返回的是index处的Code Unit,最好不要使用

//下面返回ith处的Code Point
int index = greeting.offsetByCodePoints(0, i);//offsetByCodePoints,返回从0处开始的第i个Code Point的位置
int cp = greeting.codePointAt(index); //获取第index位置的Code Point

//用下面的函数来取到一个字符串中的所有的Code Point
int cp = sentence.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp)) i += 2;
else i++;

i--;
int cp = sentence.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp)) i--;

2、substring返回的是子字符串,返回的是Code Unit。
3、对string的任何修改都是创建一个新的string,如果考虑到效率的话,可以使用StringBuilder。
4、可以用+进行连接
5、比较两个字符串的相等,可以用string1.equals(string2),如果忽略大小写的用string1.equalsIgnoreCase(string2)进行比较,因为==只比较两个字符串是不是放在一个位置的。也可以使用string1.compareTo(string2),但是equals更清楚。
6、Java API的帮助文档在docs/api/index.html,很有用途的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐