1、基本数据类型

1.1 基本数据类型

byte、chart、short、int、long、float、double、boolean 共8种数据类型为基本数据类型:
数据类型     位数     取值范围    
byte     8     -128 ~ 127
char     16     '\u0000' ~ '\uFFFF'
short     16     -2^15 ~ 2^15-1
int     32     -2^31 ~ 2^31-1
long     64     -2^63 ~ 2^63-1
float     32     略    
double     64     略    
boolean     1     true / false

另外,Java中的整数从形式表现上来说有四种方式,除了最常见的十进制,还有:
  • 八进制,逢八进一,用0开头
  • 十六进制,逢十六进一,0x开头,0-9,A,B,C,D,E,F
  • 二进制,逢二进一,任何数据在计算机都是二进制存储,八个二进制代表一个字节byte

另外要提的是,float和double是浮点数类型,即带小数位的数据类型,其数据存储方式是按 “指数位” 和 “有效数字位”,所以尽管double位数和long都是64位,但是double表示的数字范围更广,但同时,也因为这种方式,其数字精度并不准确。(float数据必须带"f"或"F"以和double区分)

float:1bit(符号位) + 8bits(指数位) + 23bits(尾数位)


double:1bit(符号位) + 11bits(指数位) + 52bits(尾数位)



1.2 类型转换

1.2.1 自动类型转换

  • 两种类型必须兼容(如boolean无法转int),且目标类型大于源类型(即低精度转高精度)
  • 对于表达式而言,最终结果与表达式中最高的数据类型相同
  • 类型转换自动发生,无需显式说明

char ch = 'A';
int num = ch;
float f = num;
double d = f;
4
 
1
char ch = 'A'; 
2
int num = ch;
3
float f = num;
4
double d = f;

1.2.2 强制类型转换

强制进行类型转换,如果被转换的值的数据类型大于其目标类型,将会丢失部分信息。因为强制转换会进行位数截取,如:
short a = 128;
byte b = (byte) a;
System.out.println(a); //128
System.out.println(b); //-128
4
 
1
short a = 128;
2
byte b = (byte) a;
3
System.out.println(a); //128
4
System.out.println(b); //-128

short a = 0000 0000 1000 0000,强制转换截取后8位,正数用源码表示,负数用补码表示,第一位为符号位,所以转换后的a,即b,反而变成了-128

除非万不得已,或者绝对确定,否则尽量不使用强制转换。



2、引用数据类型

除了上述的基本数据类型以外,其他都归属于引用数据类型。其实说人话就是,引用数据类型就是对象。

不论是String、int[]、还是自定义的类,都是引用数据类型。

不同的在于,基本数据类型之间的赋值,是对值进行了拷贝;而引用数据类型之间的赋值,是虚地址之间的拷贝。

一个示例说明:
public class Test {
//属性
int a = 11;
char[] ch = {'n', 'b'};
//方法
public void change(int a,char ch[]) {
a = 99;
ch[0] = 's';
}
//测试
public static void main(String args[]) {
Test test = new Test();
test.change(test.a, test.ch);
System.out.println("test.a = " + test.a);
System.out.println("test.ch = " + test.ch[0] + test.ch[1]);
}
} //对于基本数据类型,拷贝过去对原来的属性没有影响,最终还是11;
//对于引用数据类型,传递的是虚地址,在方法中远程更改了真正的对象,所以输出不是nb,而是sb
x
 
1
public class Test {
2
    //属性
3
    int a = 11;
4
    char[] ch = {'n', 'b'};
5
    //方法
6
    public void change(int a,char ch[]) {
7
        a = 99;
8
        ch[0] = 's';
9
    }
10
    //测试
11
    public static void main(String args[]) {
12
        Test test = new Test();
13
        test.change(test.a, test.ch);
14
        System.out.println("test.a = " + test.a);
15
        System.out.println("test.ch = " + test.ch[0] + test.ch[1]);
16
    }
17
}
18

19
//对于基本数据类型,拷贝过去对原来的属性没有影响,最终还是11;
20
//对于引用数据类型,传递的是虚地址,在方法中远程更改了真正的对象,所以输出不是nb,而是sb

最后要提一点的就是,对于基本数据类型之间是否相等,我们使用 “==” 的方式,实际是判断其二进制是否相同;而该方式用来判断引用数据类型,则是对比虚地址,我们知道对象和对象之间都是不同的,所以除非是同一个对象否则该方式只会返回给你false,所以对象之间的比较我们更多的是根据需要重写equals方法。


[06] Java的数据类型的更多相关文章

  1. 浅析Java基本数据类型

    作为一种强类型语言,Java针对每一种数据都定义了明确的数据类型.大体来讲可分为:基本数据类型和引用数据类型:在此,主要讨论前者,后者以后再继续探究. Java基本数据类型分为四类八种: 1: 整数 ...

  2. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  3. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

  4. 054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述

    054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述 本文知识点:数组概述 为什么要学习数组? 实际问题: 比如我们要对学生的成绩进行排序,一个班级 ...

  5. Java基础-数据类型int,short,char,long,float,double,boolean,byte

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  6. Java中数据类型及其之间的转换

    Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...

  7. Java 基本数据类型 sizeof 功能【转】

    转自:http://blog.csdn.net/sunboy_2050/article/details/7310008 版权声明:本文为博主原创文章,未经博主允许不得转载. Java基本数据类型int ...

  8. java 的数据类型

    java 的数据类型有基本类型和引用类型 java的类的关系:有继承,有依赖,有关联,聚合,组成.

  9. java基础之java基本数据类型

    1.Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式.接触每种语言的时候,都会存在数据类型的认识,有复杂的.简单的,各种数据 ...

随机推荐

  1. javascript-new关键字

    先上一段代码: function Person(name,age,job) { this.name=name; this.age=age; this.job=job; this.sayName=fun ...

  2. 腾讯织云:DevOps 流水线应用平台践行之路

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:梁定安,腾讯织云负责人,目前就职于腾讯社交网络运营部,任运维技术总监,开放运维联盟委员,腾讯云布道师,腾讯课堂运维讲师,EXIN D ...

  3. mysql 存储过程中使用游标中使用临时表可以替代数组效果

    mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在 ...

  4. 【Oracle】控制文件管理

    /* 控制文件是oracle数据库最重要的物理文件之一,每个oracle数据库都必须有一个控制文件,在启动数据库实例时, oracle会根据初始化参数查找到控制文件的名称及位置信息,并读取控制文件的内 ...

  5. C语言指针(二)指向指针的指针

    注意:指向指针的指针适合于做链表 1.声明方式:在变量名前放置两个*符号 int**var; 2.实例: #include<stdio.h>int main (){intvar;int*p ...

  6. centos 创建用户组及用户

    用户及用户组存放文件 1./etc/passwd 其中每一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下: [cpp] view plaincopyprint?在CO ...

  7. install ubuntu16.04

    1.添加分区 添加驱动目录/boot,ext4文件系统 ,给200m够了,图中2G多了,勾选格式化 添加      根目录/ 25G ,ext4文件系统,勾选格式化 添加 家目录 /home ,30G ...

  8. composer安装报错Composer throws [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist

    解决方法:删除C:\Users\Administrator\AppData\Roaming\Composer\vendor\fxp下的文件

  9. BotVS开发基础—2.2 下限价单 交易

    代码 import json def main(): Log("ORDER_STATE_PENDING:", ORDER_STATE_PENDING, ", ORDER_ ...

  10. (转)新手写爬虫v2.5(使用代理的异步爬虫)

    开始 开篇:爬代理ip v2.0(未完待续),实现了获取代理ips,并把这些代理持久化(存在本地).同时使用的是tornado的HTTPClient的库爬取内容. 中篇:开篇主要是获取代理ip:中篇打 ...