• 数据类型


    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]并不存放程序名,而是存放第一个参数。

  • 相关阅读:
    LCA模板
    bzoj1660:[Usaco2006 Nov]badhair乱头发节
    不老的传说
    田忌赛马
    最短路径问题
    hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)
    hdu1215-七夕节-(埃氏筛+唯一分解定理)
    迷宫-(bfs)
    区间或和-(位运算)
    海啸-(矩阵前缀和)
  • 原文地址:https://www.cnblogs.com/johnsblog/p/4035395.html
Copyright © 2020-2023  润新知