• Java 基本数据类型+引用数据类型详解


    一.数据类型

    java是强类型语言,指的是一旦一个常量或变量声明出来,它的类型就确定了,以后都不会变成其它类型,声明的时候是整型,以后都是整型
    (ps:javascript是弱类型)
    var i =10;s
    i = "hello";
    var d =new Date();

    int i =10;
    i ="hello";//XXXXXX


    java的数据类型包括哪些呢?
    int a = 6;
    Scanner input = new Scanner(System.in);


    基本数据类型只有8个:byte、short、int、long、float、double、char、boolean

    注意: String不是基本数据类型!!!是引用类型
    引用数据类型有无限个

    二.数学进制

    (1)十进制

    日常生活中使用的进制都是十进制,因为古人数数只能用10个手指头,满10进1
    基数有10个,0到9,满10进1

    7332 = 7 * 10(3) + 3*10(2) + 3*10(1) + 2*10(0)

    (2)二进制

    1 二进制是谁发明?如何发明的
    18世纪德国数理哲学大师莱布尼兹发现
    部分灵感来源于中国古代哲学,如易经
    二进制转成10进制
    11111 = 1*2(0) + 1*2(1) + 1*2(2) + 1*2(3) + 1*2(4) = 1 +2 + 4 + 8+ 16 = 21
    0001 = 1
    0010 = 2
    1010 = a 10
    1011 = b 11
    1100 = c 12
    1101 = d 13
    1110 = e 14
    1110 = f 15

    2 二进制表示
    基数:只有1和0,逢二进一

    3 二进制加法
       1011 0001
    + 0110 1001
     ---------------
    1 0001 1010


    十进制和二进制转换: 用短除法
    89 = 》1011001
    89 = 64+16+8+1 = 1011001

    100 0101 =》 69
    ----------------------------
    78 = 》64 + 8 4+2 = 0100 1110

    0101 1001 = 》64 +16 + 8+1 = 》89

    (3)八进制

    基数:0,1,2,3,4,5,6,7
    逢八进1
    343721
    8 = 2(3) = 》一个八进数 == 3个二进制数
    二进制和八进制转换
    1 101 = > 1*2(4-1) + 1*2(3-1) + 0 + 1 => 13(十进制) => 15(八进制)

    24(八进制) = 》10 100(二进制)
    ---------------------------------

    01 110 101 = 》165(八进制)
    3721 = 011 111 010 001

    (4)十六进制

    十六制
    0 1 2 3 4 5 6 7 8 9 A B C D E F

    16 = 2(4)
    一个十六制的数 等于 四个二进制的数

    ---------------------------------
    FF = 1111 1111
    C83D = 1100 1000 0011 1101

    三.整数型

    (1)byte

    byte称之为一个字节,一个字节等于二进制的8位。
    -128 ~ 127
    -2(7)~ 2(7)-1

     


    在计算机中,任何数据都是以二进制存储的,对于整型来说,正数存的是它的二进制原码,负数存储的是它的绝对值的二进制补码

    负数的补码 = 先绝对值,再取反 再加1
    例1:


    -128
    绝对值
    128
    二进制
    1000 0000
    取反:
    0111 1111
    加1
    1000 0000(补码)



    例2:


    -9
    绝对值
    9
    二进制
    0000 1001
    取反
    1111 0110
    加1
    1111 0111


    例3:

     


    34 = 32+2 = 0010 0010

    -34 = 1101 1110

    -69=1011 1011

     

    (2)short

    short 短整型
    short 16位的整型
    范围:-2(15) ~ 2(15)-1
    范围 -32768 ~ 32767
    ----------------------

    0111 1111 1111 1111
    1000 0000 0000 0000

    (3)int

    1 范围大小
    int - 整型 32位
    int age = 12;
    int count=0;

    范围:-2(31) ~ 2(31)-1

    2 默认类型
    平常见到整型常量,它默认都是int类型
    System.out.println(100);
    a = b+3;

    3 整型的在代码中的表示方式
    查询帮助文档把8进制或16进制以对应的进制输出。


    1)int i = 89;
    2) int i = 034;//打头的0表示这个数是一个八进制数
    int b = 034;
    System.out.println(Integer.toOctalString(b));
    3)int i = 0xC4F;//0x 表示这个数是一个十六进制数
    4)int i = 101011101;//是十进制,非二进制


    4 获取int 最大值和最小值
    Integer.MAX_VALUE;
    Integer.MIN_VALUE;

     (4)long

    1 范围

    long - 长整型 64位
    -2(63) ~ 2(63)-1

    2 时间的毫秒数经常long表示
    当前时间距离1970-1-1 0:0:0点的毫秒数
    System.currentTimeMillis()

    3 长整型的常量如何表示
    我们要表示一个长整型,需要在数值的后面加上L
    128 //int整型
    128L //长整型
    128l;//不要写l,看起来像1

     

     四.浮点型

    (1)float

    1 范围
    float - 单精度浮点,32位
    但是虽然是32位,但存储方式跟整型完全不同

     


    2 float表示法
    必须在数值后面加F
    float f = 2.89F;

    (2)double

    1 范围
    双精度浮点 64位
    表示的范围要比long类型(也是64)要大,主要是跟它的存储的方式

     


    2 double的表示
    1)默认情况下,所有的小数常量都是double
    double d = 7.89;
    System.out.println(3.14);
    2) 明确表示,在数值后面加上D
    double d = 7.89D;

    3 科学计数法
    3617859.212343 = 》3.617859212343E6
    double d = 3.617859212343E6;

    4 float和double精确性
    有一些数是不能精确表示
    2.0-1.1 = 0.9;//可是不是
    结论是,尽量避免比较2个浮点数是否相等!!!!!
    System.out.println(2.0-1.1==0.9);
    如果真的要得到一个精确的表示,或者要比较2个小数的大小,怎么办??请用BigDecimal类
    BigDecimal t = new BigDecimal("2.0");//参数以字符串形式表示
    BigDecimal y = new BigDecimal("1.1");
    BigDecimal r = t.subtract(y);
    System.out.println(r);

     

    五.字符型

    1 char
    存储字符的,范围是16位
    char也可以当作短整型看,但是char是无符号整型
    所以能表示范围是0~65535
    换句话,我们的字符最多能表示65536个字符,其中中文占了大概40000多个 0-127 是早期计算机能够键入的128个字符,称作ascii码
    内存中只能存二进制的数,所以任何的数据都要转成二进制,字符也不例外。
    我们没办法在内存中直接存一个'中',所以会将'中'对应一个整型数值,然后再把这个数值的二进制存进内存
    '中'到底对应什么数值?这由各国或者标准组织制定的编码决定。
    假设中国的国标码gb2312把'中' ==》23432,然后国际上的utf-8把‘中’==》20013,如果存进内存存的是gb2312,从内存中读出来使用utf-8,这就会导致乱码

     

     

    2 char是如何表示
    char c = 'A'; //最基本的表示法
    char c = 65;//用整型数值表示
    char c = '\u0041';//采用16进制的unicode码

     


    3 转义
    在计算里,很多字符是当中程序的特殊用途,或者有一些字符通过键盘是输入不了的,此时就需要用一些普通字母加上\,结合在一起表示一种特殊的字符
    例如回车\r ,换行用\n, 制表符\t

    六.布尔型

    1 范围
    由jvm本身决定,jdk规范标准没有对就boolean值严格规定要由多少位来保存。
    官方的jdk,民间的openJDK,IBM JDK对boolean存储位数可能都不一样

    2 boolean的取值
    要么true,要么false
    boolean b1 =true;
    boolean b2 = false;
    boolean b3 = TRUE;//错误
    boolean b4 = FALSE;//错误
    boolean b5 = 1;//错误
    boolean b6 = 0;//错误

    3 布尔值
    经常用在条件判断,循环控制
    案例:1.过马路
    2.领钱

    七.字符串型String

    1 String 字符串类型,是由0到多个char连在一起组成的一串字符 它是一个引用数据类型

    2 String表示
    需要用""将一串字符引起

    3 定义字符串
    String s = "HelloWorld";
    String s1 = "";//表示空字符串
    String s2 = " ";//表示字符串里面有一个空格
    String s3 = "Hello\nWorld";

    八.Scanner

    1 Scanner
    可以动态接收用户输入的数据:
    案例:用户名和密码的输入。

    扫描器,从jdk1.5提供
    用来扫描输入流中的字符串内容

    2 构建一个终端扫描器
    Scanner scan = new Scanner(System.in);
    ps:System.out -- 终端输出流
    System.in -- 终端输入流

     


    3 使用Scanner
    nextInt();//读取一个整型数据
    nextBoolean();//读取一个boolean值数据
    nextLong();
    nextShort();
    nextFloat();
    nextDouble();
    nextByte();

    next();//读取一个字符串型 abc
    nextLine();//读取一整行字符串 abc def

    abc def
    hij klm

     

     

    九.类型提升和强转

    1 什么是类型提升和强转
    自动类型转换:小的数据类型可以自动(隐式)提升为大的数据类型,例如int -> long
    强制类型转换: 小数据类型的变量存取大数据类型的值,例如 long l=8L; int i=l;此时编译会报错。但是开发者可以用明确指令告诉编译器,所有责任由开发者承担。这就是强转

    2 示例
    //自动类型转换
    //类型要兼容,小变大
    int i = 89;
    System.out.println(i);
    double d = i;//自动转换为double
    System.out.println(d);

    //强制类型转换
    //类型要兼容,大变小,注意精度可能会丢失
    double d2 = 90.78d;
    System.out.println(d2);
    int i2 = (int)d2;//有程序员承担责任后,强行转换为int
    System.out.println(i2);
    3 自动提升方向

     

     

     

     


  • 相关阅读:
    50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
    50个查询系列-第12个查询:查询至少学过学号为“1001”同学所有课程的其他同学学号和姓名
    033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试
    032医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------Service层和Action层和调试
    031医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------sql补充知识
    50个查询系列-第11个查询:查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
    030医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------Dao层:基本的查询语句的编写
    Java 代码性能调优“三十六”策
    JVM运行原理及Stack和Heap的实现过程
    细数那些不懂Spring底层原理带来的伤与痛
  • 原文地址:https://www.cnblogs.com/Transkai/p/10345519.html
Copyright © 2020-2023  润新知