数据类型

Java中的所有函数都属于某个类的方法。因此,Java中的main方法必须有一个外壳类。

Java中的main方法必须是静态的。

public class ClassName
{
    public static void main(String[] args)
    {
        program statements
    }
}

 

Java是可移植的,它的数据类型所占空间是固定的。

整形:int 4字节,short 2字节,long 8字节,byte 1字节

long型数值有一个后缀L,十六进制数值有一个前缀0x。

Java没有unsigned类型

 

浮点型:float 4字节 6~7位有效数,double 8字节 15位有效数

float类型的数值有一个后缀F,没有后缀的默认为double

 

在C++中,数值或指针可代替boolean值,0相当于false,非0相当于true,在Java中则不行

 

C和C++区分变量的声明和定义,例如 int i=10;是定义一个变量,而 extern int i;是声明一个变量,Java不区分变量的声明与定义。

 

Java使用关键字final定义常量,与C++中的const类似。

 

对于布尔值,&&和||按短路方式进行计算,即如果第一个表达式就能得出结果,就不必算第二个表达式了,而&和|则不按短路方式进行计算。

 

>>运算符用符号位填充左侧的位,>>>运算符用0填充左侧的位。

 

算数运算时:

如果两个操作数中有一个是double类型的,那么另一个操作数将会转换为double类型;

否则,如果其中一个操作数是float类型的,那么另一个操作数将会转换为float类型;

否则,如果其中一个操作数是long类型的,那么另一个操作数将会转换为long类型;

否则,两个操作数都将被转换为int类型。

 

强制将浮点数转换为整数,会将浮点数的小数部分截断。如果想进行舍入运算,就要用Math.round方法

double x=9.997;

int nx=(int)Math.round(x);//round返回的是long类型

 

Java的String类不能像C++中那样修改某个位置的字符,但可以改变字符串变量的内容,即重新赋值。

Java:String greeting = "Hello";

C++:char *greeting = "Hello";

以上二者是类似的。

 

当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。例如:

int age=13;

String rating="PG" + age;

rating得到"PG13"。

 

Java中不能使用==来判断两个字符串是否相等,它只是判断两个字符串是否被放在同一位置。

使用equals判断两个字符串是否相等:

判断字符串s与t是否相等:s.equals(t);相等则返回true。这里s和t可以是字符串变量或者字符串常量,如:"Hello".equals(greeting);

 

大数值

如果基本的整数和浮点数精度不能满足需求,就可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。

 使用静态的valueOf方法可以把普通的数值转换为大数值:

BigInteger a = BigInteger.valueOf(100);

可惜的是,不能使用人们熟悉的运算符(如+和*)处理大数值,而需要使用大数值类中的add和multiply方法。

BigInteger c = a.add(b); //c = a+b

BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d=c*(b+2)

注意:Java没有提供运算符重载功能。

 

BigInteger add(BigInteger other)

BigInteger subtract(BigInteger other)

BigInteger multiply(BigInteger other)

BigInteger divide(BigInteger other)

BigInteger mod(BigInteger other)

 

int compareTo(BigInteger other)

如果这个大整数与另一个大整数相等,则返回0;如果小于另一个大整数,则返回负数;如果大于另一个大整数,则返回正数。

static BigInteger valueOf(long x)

返回值等于x的大整数。

 

BigDecimal与BigInteger有类似的成员方法,特别的是:

static BigDecimal valueOf(long x) //返回值为x的一个大小数

static BigDecimal valueOf(long x,int scale) //返回值为x/10^scale的一个大小数

 

数组

int[] a和int a[]都可以声明数组,在Java中,int[] a更常用。

要把a初始化为一个真正的数组,要使用new运算符:int[] a = new int[100];

a.length返回数组元素的个数。

Java中的数组与C++中分配在堆上的数组指针类似,但没有指针运算,即不能通过a加1得到数组的下一个元素。不过Java中的[]运算符可以检查数组边界。如果越界会抛出"array index out of bounds"异常。

初始化数组也可以使用与C++类似的方法:int[] a={2,3,4,7}

 

Java允许将一个数组变量拷贝给另外一个数组变量,这时,两个变量将引用同一个数组,这与C++中的数组指针的性质类似。

int[] luckyNumbers = smallPrimes;

luckyNumbers[5] = 12;//now smallPrimes[5] is also 12

如果希望将一个数组的所有值拷贝到另一个数组中去,就要使用System类的arraycopy方法:System.arraycopy(from,fromIndex,to,toIndex,count);

数组to必须有足够的空间来存放拷贝的元素。

 

数组排序可以使用Arrays类中的sort方法,这个方法使用优化的快速排序算法。

int[] a = new int[100];

...

Arrays.sort(a);

数组比较可以使用Arrays类中的equals方法:

static boolean equals(type[] a,type[] b)

type为int,long,short,char,byte,boolean,float,double

 

二维数组

double[][] balances;

初始化:

balances = new double[NYEARS][NRATES];

或者

int[][] magicSquare = 

{

    {16,3,2,13},

    {5,10,11,8}

};

double[][] balances = new double[10][6];//Java

类似于C++中

double **balances = new double*[10];

for(int i=0;i<10;i++)

    balances[i] = new double[6]

 

命令行参数

String[] args存放命令行参数,与C++不同的是,args[0]并不存放程序名,而是存放第一个参数。

posted @ 2014-10-19 20:15  米其林轮船  阅读(225)  评论(0编辑  收藏  举报