Java基础小结

小知识

C++中bool型值为0表示false, 非0为true,但是java中不允许这样,如if (x = 0) 会报错

1
2
3
Math.sqrt();  //求平方根
Math.PI //3.1415926...
Math.E //自然常数e(2.71828...)

$import static java.lang.Math.*$
使用上述语句就不必再数学方法名和常量名前添加前缀”Math.”

强制转换

1
2
double x = 9.97;
int nx = (int)x; //nx=9

强制转换通过截断小数部分奖将浮点数转化为整型,若需要四舍五入可以使用 Math.round

1
int nx = (int)Math.round(x); //nx=10

$Math.round()$返回的是long型,因此还需要强制转化才能变成int型
java中不使用逗号表达式,不过可以在for 循环中用逗号隔开表达式

String

1
2
3
4
5
6
7
String a = "Hello";
//从第一个参数开始截取到第二个参数的前一个为止的子串
String b = a.substring(0, 3) //b="Hel"
int age = 13;
String rating = "PG" + age //字符串拼接
//java中的String不能像c++中直接修改任意字符,但可用字符串截取子串再用'+'来拼接
String a = a.substring(0, 3) + "p!"; //a="Help!"

检查两个字符串是否相等 可以用 equals方法
如 $s.equals(t)$ 如果s串与t串相等返回true, 否则返回false,
s和t可以是字符串变量也可以是字符串常量
如”Hello”.equals(a) 也是合法的,如果检测是否相等时不区分大小写,
可以用 $equalsIgnoreCase()$
注意:不要用’==’来检测两个字符串是否相等,这个运算只能确定两个字符串是否放在同一位置
两个字符串放在同一位置必然相等,但可能两个字符串内容相等,
但不在同一位置,用这个方法会返回false
java中的 compareTo()方法与c++中的strcmp()完全类似,
如 if (s.compareTo(“Hello”) == 0) …

空串与null

空串是长度为0的字符串可以用s.length()或s.equals(“”)来判断
空串是一个java对象,有自己的长度(0)和内容(空)
Null串表示目前没有任何对象与该变量关联,不能使用
可以用 if (s == null) 来判断,若s == null,s调用s.length()会报错

标准输入

1
2
3
4
5
import java.util.Scanner;
Scanner input = new scanner(System.in);
input.nextInt(); //读取一个整数
input.next(); //读取一个字符串,遇到空格或换行结束
input.nextLine(); //读取一个字符串,遇到换行结束

标准输出

1
2
System.Out.print();   //不会自动换行
System.Out.println(); //会自动换行

注:因为输入是可见的,所以Scanner 类不适用于从控制台读取密码
Java SE 6 特别引入了 Console 类来实现这个目的。读取密码可以采用:

1
2
3
Console cons = System.console();
String username = cons.readLine("User name:");
char[] passord = cons.readPassord("Passord:");

为了安全起见,返回的密码存在一维字符数组中,而不是字符串中,在对密码进行处理后,
应马上用一个填充值覆盖数组元素。

块(即复合语句)是指有一对花括号括起来的若干条简单的Java语句,块确定了变量的作用域
一个块可以嵌套在另一个块中,但是不能在嵌套的两个块中重复定义声明同一变量。
在C++中可以在嵌套的块中重复定义同一变量,在内层定义的变量会覆盖外层定义的变量。
这样有可能导致程序设计错误,因此在Java中不允许。

大数值

java.math包中有两个类BigInteger和BigDecimal.前者实现了任意精度的整数运算,后者提供了任意精度的浮点数运算.

1
2
3
4
5
6
7
8
9
import java.math.*;
BigInteger a=BigIntger.valueOf(100); //将普通数转化为大数
BigInteger c=a.add(b); //c=a+b;
BigInteger d=c.multiply(b.add(BigInteger.valueOf(2))); //d=c*(b+2)
BigInteger subtract(BigInteger other); //减
BigInteger divide(BigInteger other); //除
BigInteger mod(BigInteger other); //取余
int compareTo(BigInteger other); //比较大小
//相等返回0,这个大数比另一个大返回正数,否则返回负数