C\C++ 程序员从零开始学习Android - 个人学习笔记(四) - java基础 - 数据类型、变量、字符串、数组

1,数据类型


  java数据类型分为基本类型(原始类型、原生类型)和引用类型两种。

1.1 基本类型


  包括布尔类型、数值类型、returnAddress类型。

1.1.1 布尔类型


  boolean,取值false和true。虚拟机对其支持非常有限,没有专用的字节码指令,所有java源代码中的涉及到的boolean运算,编译后都使用int代替。boolean数组,在虚拟机层面,作为和byte数组一样处理。

1.1.2 数值类型


  分为整型和浮点两种,和C\C++不同,其存储大小、字节序(大端)、符号固定,和机器无关,在所有平台上都一样。

  整型包括:

    byte: 8位(bit)有符号二进制补码整数

    short: 16位(bit)有符号二进制补码整数

    int: 32位有符号二进制补码整数

    long: 64位有符号二进制补码整数

    char: 16位无符号二进制整数

  浮点(IEEE 754)包括:

    float: 32位,单精度

    double: 64位,双精度

1.1.3 returnAddress类型:

  指向一条虚拟机指令的操作码,在JAVA语言中并不存在相应的类型,程序员无法直接使用。

1.2 引用类型

  分为三种引用类型:类类型、数组类型、接口类型

  引用在某种语义上等同于C\C++中的指针,指向一个相应类型(类、数组、接口)实例对象。

  当一个引用类型不指向任何对象时,其值为一个特殊值:null。引用的默认值就是null。

2,变量

 2.1 定义和初始化

  c\c++区分变量的声明和定义,但java不区分,只有定义(或声明)。

  局部变量未初始化就使用,在java中会报编译错。

 2.2 常量

  java中用关键字final表示常量。const作为java的保留关键字,但目前并没有使用,java必须使用final.

3, 字符串

  java中没有内置字符串类型,所有的字符串都是标准库String类的实例。

   String类是一个final类,其对象是不可变字符串,意味着无法对String类对象(字符串)做任何修改,也就意味着对字符串的修改会导致新字 符串对象的创建,这显然是耗时耗空间的事情。之所以设计成final,其意图是可以让字符串常量共享。字符串的本质是Unicode字符序列,如果两个字 符串常量对象有着相同的字符序列,那么这两个对象可以指向同一个字符序列 -  即内存中(常量池)中只需要保存这个字符序列的一个副本。

  字符串可以和其他任何对象以及基本类型进行拼接,比如"this is " + obj,本质是调用obj.toString方法将obj转换成一个string对象,然后进行拼接。

   字符串拼接时会创建新的String对象,时间空间效率都比较差,因此最好用StringBuffer和StringBuilder来创建,这两者的接 口一样,前者效率略低,但可用于多线程环境中(同步导致性能降低)。 StringBuffer不是final类,可自由添、删、改而不会导致创建新对象。

  在使用StringBuffer时,默认的构造函数会分配16个char的空间,如果append的字符串超过这个大小,就会导致空间的重新分配和原有字符串的拷贝,因此,在字符串大于16 char时,应尽量使用指定空间大小的构造函数。

 

4,数组

  数组是一种引用类型,在java中有两种定义风格:int[] a 和 int a[],java程序员一般使用前者。java中数组长度可以为0。

  初始化:

    int[] a = new int[10];

    int[] a = {1, 2, 3, 4, 5};

    int[] a = new int[]{1, 2, 3, 4, 5};

  拷贝:

    int[] a = {1, 2, 3, 4, 5};

    int[] b = a;  // 并没有做元素拷贝,只是简单的将b和a指向(引用)同一个数组。

    int[] c = Arrays.copyof(a, a.lenth);  //生成一个新的数组对象,将a的元素拷贝到这个对象中,然后让C指向这个对象。

  java中并没有“真正的”多维数组,只有一维数组,多维数组被解释为数组的数组。    


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值