Java基本数据类型tips

  Java里的数据类型如下所示,我们知道在初始化类的成员变量或类变量时,如果没有给这个变量赋值,那么jvm会给这些变量一个默认值,这些默认值到底等于多少呢?我自己写了一段代码测试了一下。
这里写图片描述

public class BasicTypeTest {
    public static int i;//i = 0
    public static byte b;//b = 0
    public static short s;//s = 0
    public static long l;//l = 0
    public static float f;//f = 0.0
    public static double d;//d = 0.0
    public static boolean flag;//flag = false
    public static char c;//c = ' '
    public static String str;//str = null


    public static void main(String[] args){
        System.out.println(i);
        System.out.println(b);
        System.out.println(s);
        System.out.println(l);
        System.out.println(f);
        System.out.println(d);
        System.out.println(flag);
        System.out.println(c+"..");
        System.out.println(str);
    }

}
//运行结果:
//0
//0
//0
//0
//0.0
//0.0
//false
// ..
//null

  大多数常用的类型没有什么好说的,但是一些不常用的得好好琢磨一下了,比如说char型和byte型,平时用的可能比较少,但是也很重要。

short型

  short型占两个字节,范围为-32768到32767

int型

  int型占四个字节,范围为-2147483648到2147483647,共十位。

long型

  使用long型时要注意:声明long型常量需要在后面加’l’或’L’,一般是加’L’,因为’l’容易误认为是i的大写。更确切地说,如果long型变量的值没有超过2147483647(int的范围是-2147483648到2147483647),加不加L都没问题,但是如果超过了这个数,必须加L。

long long1 = 2147483647;//合法,这里是long类型,不是int
//long long2 = 2147483648;不合法
long long2 = 2147483648L;//合法
float型与double型

  小数字面量默认是double类型,如果要声明一个float类型的常量,必须在数字后面加’f’或’F’,否则无法通过编译。

boolean型

  Java里boolean类型的值只有true和false两个值,不可以为0或非0的整数代替false或true,这点和C语言不同,我老弄混。

byte型

  byte型占一个字节,范围是-128到127,直接使用就行:byte b = 125;注意范围就行。

char型

  和C语言里char型占一个字节不同,Java里char型占两个字节,这点我也容易混淆。C语言里,字符常量的值就是该字符的ASCII码值,因此一个字符常量实际上也是一个字节的整型常量,可以参与各种运算,此时,如果是中文的话,就不能用char型了,只能用字符数组或指针,注意:C语言里没有相应的字符串变量
  Java里一个char型占两个字节,而且char型的值是Unicode,不过8为的ASCII码是包含在Unicode中的,所以很方便。这里,Java里的char类型也可以参与各种加减运算和比较运算。
  为什么重点提这个char类型呢?因为字符串是不能直接比较的,所以我们有时候需要把字符串转换成字符数组来比较,一般只需要把英文字母转换成对应的ASCII码值就可以了,那么怎么把一个字符转换成Unicode值呢?直接强转就行了,实际上,int和char类型是可以互相转换的,下面的代码给出了方法。

public static void main(String[] args){
        char d = 'a';
        System.out.println((int)d);
        char c = '中';
        System.out.println((int)c);
        char n = '2';
        System.out.println((int)n);
}
//运行结果:
//97
//20013
//50

  注意到字符’2’的Unicode码值不是2,而是50,所以有时候如果我们希望获取’2’的字面值,就需要使用Character包装类的静态方法getNumericValue(char)方法,这样的话可以得到字面量对应的值,另外这个方法还有一个重载版本getNumericValue(int),这个方法返回int值(即Unicode码值)对应的字符,但是这两个方法里的参数对应的字符都必须要含有数字,否则返回-1。

public static void main(String[] args){
    int i = '\u216C';//罗马数字50:L
    System.out.println((Object)i instanceof Integer);
    char ci = '\u216C';
    System.out.println((Object)ci instanceof Character);
    System.out.println(i == ci);
    System.out.println(i);
    System.out.println(ci);
    char n = '2';
    System.out.println((int)n);
    System.out.println(Character.getNumericValue(n));
    System.out.println(Character.getNumericValue(50));
}
//运行结果:
//true
//true
//true
//8556
//?
//50
//2
//2

  注意,判断基本数据类型变量的类型,最好通过我上面的代码给的方式判断,这也是Java没有typeof的弊端吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值