Day02-数据类型扩展以及面试讲解


数据类型以及面试讲解

数据类型

强数据类型

要求变量的使用要严格符合规定,所有变量都必须先定义之后才能使用
优点:安全性高 缺点:速度慢

弱类型语言

可以不符合规定,不出事就可以

Java的数据类型分为两大类

  • 基本类型(primitive type)

  • 引用类型(reference type)

基本数据类型:数值类型、Boolean类型。

数值类型:整数类型、浮点类型、字符类型。

    整数类型:
        byte占1个字节范围:-128~127
        short占2个字节范围:-32768~32767
        int占4个字节范围:-2147473648~2147483647
        long占8个字节范围:-9223372036854775808~9223372036854775807

    浮点类型:
        float占4个字节
        double占8个字节
    字符类型:char占2个字节
类型 说明符比特数(字节数)有效数字数的范围
float32(4)6~710-37~1038
double64(8)15~1610-307~10308
long double128(16)18~1910-4931~104932
Boolean类型:boolean占1位,其值只有true和false两个

位表示:计算机 内部数据 储存的最小单位

字节:计算机 数据处理 的基本单位,习惯上用B表示

1字节(byte) = 8位(bit)

引用数据类型:类、接口、数组


数据类型扩展

整数扩展

每个进制的表示方式都不同(开头):二进制0b、十进制、八进制0、十六进制0x

例如:

        int i = 10;
        int i2 = 010; //八进制0开头
        int i3 = 0x10; //十六进制0x开头   0~9 A~F F就是16
        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        //输出结果是
        //10
        //8
        //16

浮点数扩展

float字长是有限离散、结果舍入误差、一个大约值,所以它接近但不等于

变量类型不同,float是单精度型浮点数据,double是双精度型浮点数据;在内存中所占用的空间不一样,float占用4个字节(32位)内存空间,可以提供7位有效数字;double占用8个字节(64位)内存空间,可以提供16位有效数字。

因此,少去用浮点数进行比较,如果需要比较或者计算,就是用java写好的类BigDecimal 最好完全避免使用浮点数进行比较

        //BigDecimal  数学工具类
        //float  有限  离散   舍入误差   大约   接近但不等于
        //double
        
        float f = 0.1f; //0.1
        double d = 1.0/10; //0.1
        System.out.println(f==d); //false  ==表示是否等于
        System.out.println(f);
        System.out.println(d);

        float d1 = 2333312433333333333f;
        float d2 = d1 + 1;
        System.out.println(d1==d2); //true
        
        //输出结果是
        //false   注:虽然两个数都是0.1,但是在这里f不等于d 
        //0.1
        //0.1
        //true

字符扩展

强制转换可以将字符转换为数字

所有的字符本质还是数字

编码 Unicode表:(97 = a 65 = A) 2字节 0-65536 Excel 2的16次方 = 65536

从U000开始表示,一直到UFFFF

        char c1 = 'A';
        char c2 = '中';

        System.out.println(c1);
        System.out.println((int)c1); //强制转换
        System.out.println(c2);
        System.out.println((int)c2); //强制转换

        //强制转换可以将字符转换为数字
        //所有的字符本质还是数字
        //编码 Unicode表:(97 = a  65 = A) 2字节  0-65536  
        //Excel   2的16次方 = 65536
        //从U000开始表示,一直到UFFFF
        char c3 = '\u0061';  // \u表示给它转义
        System.out.println(c3); //a
        
        //输出结果:
        //A
        //65
        //中
        //20013
        //a
转义字符

\t 表示 制表符

\n表示 换行符

布尔值扩展

flag==true 与 flag 的功能一样,最好使用 flag ,这样写的代码简洁易读。

        boolean flag = true;
        if(flag==true){ } //新手
        if (flag){ }  //老手 简化代码功能跟上一行一样
        //Less is More!  代码要精简易读

String不能使用==比较的原因

对象要从内存上分析

        String sa = new String("hello world");
        String sb = new String("hello world");
        System.out.println(sa==sb);

        String sc = "hello world";
        String sd = "hello world";
        System.out.println(sc==sd);
        //对象  从内存分析
        
        //输出结果
        //false
        //true
    String既可以作为一个对象来使用,又可以作为一个基本类型来使用。这里指的作为一个基本类型
来使用只是指使用方法上的,比如String s = "Hello",它的使用方法如同基本类型int一样,比如
int i = 1;,而作为一个对象来使用,则是指通过new关键字来创建一个新对象,比如String s = 
new String("Hello")。但是它的内部动作其实还是创建了一个对象。
    Java里对象之间的比较有两种概念,这里拿String对象来说:一种是用 "==" 来比较,这种比较
是针对两个String类型的变量的引用,也就是说如果两个String类型的变量,它们所引用同一个
String对象(即指向同一块内存堆),则 "==" 比较的结果是true。另一种是用Object对象的
equals()方法来比较,String对象继承自Object,并且对equals()方法进行了重写。两个String对
象通过equals()方法来进行比较时,其实就是对String对象所封装的字符串内容进行比较,也就是说
如果两个String对象所封装的字符串内容相同(包括大小写相同),则equals()方法将返回true。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值