06.数据类型

Java是一种强类型语言,每个变量都必须声明其类型。

强弱类型语言

说到强类型语言,那什么是强类型语言呢?

强类型语言也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使

用。

Java、.NET、C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果

不经过转换,那么它就永远是这个数据类型了。

安全性高,运行效率相对较慢,鱼和熊掌不可兼得!强类型定义语言在速度上可能略逊色于弱类型定义

语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

与其相对应的是弱类型语言。

弱类型语言也称为弱类型定义语言。与强类型定义相反。像vb,php等就属于弱类型语言·

在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,也可以把它看成整数123,而不需

要显示转换。是不是十分的随便,我们Java就不是这样的。

但其实它们的类型没有改变,VB只是在判断出一个表达式含有不同类型的变量之后,自动在这些变

量前加了一个clong()或(int)()这样的转换函数而已。能做到这一点其实是归功于VB的编译器的

智能化而已,这并非是VB语言本身的长处或短处。

好了,到这里,我们应该对强弱类型语言有了一定的了解!我们继续回到数据类型这个话题.

数据类型

Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type)

 

字符串类型是一个类,所以它也是引用类型

 

如果你看到这一堆头疼的话,没关系,不用记,JDK中类型对应的包装类都帮忙写好了,我们需要时候可

以直接看到!可以把以下代码拷贝进行查看结果:

public static void main(String[] args) {
        //byte
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
        System.out.println("包装类:java.lang.Byte");
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
        System.out.println();
​
        // short
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
        System.out.println("包装类:java.lang.Short");
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
        System.out.println();
​
        // int
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
        System.out.println("包装类:java.lang.Integer");
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
        System.out.println();
​
        //long
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
        System.out.println("包装类:java.lang.Long");
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
        System.out.println();
​
        //float
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
        System.out.println("包装类:java.lang.Float");
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
        System.out.println();
        //double
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
        System.out.println("包装类:java.lang.Double");
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
        System.out.println();
​
        //char
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
        System.out.println("包装类:java.lang.Character");
        // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
        System.out.println("最小值:Character.MIN_VALUE="
                + (int) Character.MIN_VALUE);
​
        // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台 
        System.out.println("最大值:Character.MAX_VALUE=" 
                + (int) Character.MAX_VALUE);
    }

如果你是热爱学习的人,你现在应该非常想知道这字节到底是什么东西,所以我给大家科普一下相关知识:

/* 
​
位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。 
​
字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,  1B(byte,字节)= 8bit(位) 
​
字符:是指计算机中使用的字母、数字、字和符号 
ASCIIS码: 
​
1个英文字母(不分大小写)= 1个字节的空间 
​
1个中文汉字 = 2个字节的空间 
​
1个ASCII码 = 一个字节 
​
UTF-8编码: 
​
1个英文字符 = 1个字节 
​
英文标点 = 1个字节 
​
1个中文(含繁体) = 3个字节 
​
中文标点 = 3个字节 
​
Unicode编码: 
​
1个英文字符 = 2个字节 
​
英文标点 = 2个字节 
​
1个中文(含繁体) = 2个字节
中文标点 = 2个字节 1bit表示1位, 1Byte表示一个字节 1B=8b。 1024B=1KB 1024KB=1M 1024M=1G. */

电脑的32位和64位的区别是什么呢? 

/* 32位操作系统只可以使用32位的cpu,而64位的CPU既可以安装32位操作系统也可以安装64位操作 系统。寻址能力简单点说就是支持的内存大小能力,64位系统最多可以支达128 GB的内存,而32位系统最 多只可以支持4G内存。 32位操作系统只可以安装使用32位架构设计的软件,而64位的CPU既可以安装使用32位软件也可以 安装使用64位软件。 现在的电脑都是64位了! */

 好了,回到正题,我们了解了这些知识后,我们自己定义一些变量来看!

public static void main(String[] args) { 
            //整型 
            int i1=100; 
            //长整型 
            long i2=998877665544332211L; 
            //短整型 
            short i3=235; 
            //浮点型 
            double d1=3.5;
            //双精度 
            double d2=3; 
            float f1=(float)3.5;
            //单精度 
            float f2=3.5f;
            //单精度 
            //布尔类型  boolean true真/false假 
            boolean isPass=true; 
            boolean isOk=false; 
            boolean isBig=5>8; 
            if(isPass){ System.out.println("通过了"); 
            }else{
              System.out.println("未通过"); 
            }
            //单字符 
            char f='女'; 
            char m='男';
}

【Java语言的整型常数默认为int型,浮点数默认是Double】

整形扩展

在我们计算机中存在很多进制问题,十进制,八进制,十六进制等等的问题,他们怎么表示呢?

十进制整数,如:99, -500, 0。 
八进制整数,要求以 0 开头,如:015。 
十六进制数,要求 0x 或 0X 开头,如:0x15 。

演示

//整型 
int i=10; 
int i2=010; 
int i3=0x10; 
System.out.println(i); //10 
System.out.println(i2); //8 
System.out.println(i3); //16

浮点型扩展

【金融面试问:银行金融业务用什么类型表示?】

浮点类型flfloat, double的数据不适合在不容许舍入误差的金融计算领域。

如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

public static void main(String[] args) { 
            float f = 0.1f; 
            double d = 1.0/10; 
            System.out.println(f==d); //false 
            float d1 = 2131231231f; 
            float d2 = d1+1; 
            if(d1==d2){ 
            System.out.println("d1==d2"); 
            }else{
            System.out.println("d1!=d2");
            } 
}

由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很

多数字无法精确表示,其结果只能是接近,但不等于;二进制浮点数不能精确的表示0.1,0.01,0.001这样

10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。

最好完全避免使用浮点数比较 !

大数值:Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数

值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

浮点数使用总结:

  1. 默认是double

  1. 浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需

要使用BigDecimal类。

  1. 避免比较中使用浮点数

字符型拓展

单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示一个字符串。

char 类型用来表示在Unicode编码表中的字符。.

Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;

【科普:2字节=16位 2的16次方=65536,我们用的Excel原来就只有这么多行,并不是无限的】

【代码演示:字符转int看结果】

public static void main(String[] args) { 
        char c1 = 'a'; 
        char c2 = '中'; 
        System.out.println(c1); 
        System.out.println((int) c1); //97 
        System.out.println(c2); 
        System.out.println((int) c2); //20013 
}

Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为

u表示Unicode)

char c3 = '\u0061'; 
System.out.println(c3); //a

Java 语言中还允许使用转义字符 ‘’ 来将其后的字符转变为其它的含义,有如下常用转义字符:

 

布尔型扩展

boolean类型(一位,不是一个字节),就是0|1

boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

boolean 类型用来判断逻辑条件,一般用于程序流程控制。

boolean flag = false; 
    if(flag){
    // true分支 
    }else{ 
    // false分支 
}

【编码规范:很多新手程序员喜欢这样写】

if (is == true && un == false ) {...}

只有新手才那么写。对于一个熟练的人来说,应该用如下方式来表示:

if ( is && !un ) {....}

要习惯去掉所有的==fasle 和 ==true。Less is More!! 代码要精简易读!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值