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. 【Linux】文件存储结构

    大部分的Linux文件系统(如ext2.ext3)规定,一个文件由目录项.inode和数据块组成: 目录项:包括文件名和inode节点号.  Inode:又称文件索引节点,包含文件的基础信息以及数据块 ...

  2. 你以为你真的会用编辑器----之Vim

    Vim ----------------------- Vim下载地址:http://www.vim.org/download.php -------------------------------- ...

  3. BotVS开发基础—2.3 下市价单 交易

    代码 def main(): ticker = exchange.GetTicker(); Log("初始账户信息:", exchange.GetAccount()); # 用于对 ...

  4. Android 7.0 Power 按键处理流程

    Android 7.0  Power 按键处理流程 Power按键的处理逻辑由PhoneWindowManager来完成,本文只关注PhoneWindowManager中与Power键相关的内容,其他 ...

  5. Thread.interrupt()方法理解

    原博客地址: 多线程编程 实战篇 (四) 不客气地说,至少有一半人认为,线程的"中断"就是让线程停止. 如果你也这么认为,那你对多线程编程还没有入门. 在java中,线程的中断(i ...

  6. sqlserver自定义函数

    标量函数 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 语法 Create function 函数名(参数) Returns 返回值数据类型 [with {Encryption | ...

  7. ADO.NET的学习

    ADO.NET的几个对象 Connection:管理数据库的连接 Command:对数据库执行命令 DataReader:数据流读取器,返回的数据都是快速的且只是"向前"的数据流. ...

  8. [UWP]理解及扩展Expander

    ##1. 前言 最近在自定义Expander的样式,顺便看了看它的源码. Expander控件是一个ContentControl,它通过IsExpanded属性或者通过点击Header中的Toggle ...

  9. LINUX下C语言编程调用函数、链接头文件以及库文件

    LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...

  10. setTimeout,setInterval你不知道的事

    javascript线程解释(setTimeout,setInterval你不知道的事) 标签: javascript引擎任务浏览器functionxmlhttprequest 2011-11-21 ...