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. JMeter网站测试分析

     WEB类型: User Driver:以用户量作为衡量系统性能的主要指标的系统,典型如IM系统.企业 内部业务系统: TPS-Driver:以tps作为衡量系统性能的主要指标的系统,典型的如消息系统 ...

  2. How to generate file name according to datetime in bat command

    On the command line, note: must copy and paste below lines of code and then execute them one by one: ...

  3. java中方法传值小知识解析

    1.java语言参数之间只有值传递,包括按值调用和按引用调用. 一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值. 按值调用:包括八大基本数据类型都是按值调用.传值的时候,也 ...

  4. 关于curl / curl_multi的一些实验

    几天没写了,主要都是自己的学习过程,贴一下curl / curl_multi_exec的一些代码,mark一下. <?php /** * Created by PhpStorm. * User: ...

  5. 【Ubuntu Desktop】VMware 中 Unknown Display

    由于之前重复的安装卸载Unity桌面,今天遇到了在设置虚拟机分辨率的时候,遇到了Unknown Display问题 参考网上内容 使用 xrandr调节分辨率 xrandr只能在虚拟机本地终端执行,不 ...

  6. 网友RHCE认证考试经历

    2014年7月,为大力推广RedHat Enterprise Linux7操作系统,红帽将基RHCE认证由RHEL6转换到RHEL7上. 面对新的软件功能.新认证课程内容,初期认证学员的考试通过率一直 ...

  7. 基于Vue实现后台系统权限控制

    原文地址:http://refined-x.com/2017/08/29/基于Vue实现后台系统权限控制/,转载请注明出处. 用Vue/React这类双向绑定框架做后台系统再适合不过,后台系统相比普通 ...

  8. java 面试,如何提升自己的实力,摘自 java web轻量级开发面试教程

    本内容摘自 java web轻量级开发面试教程 其中有一段讲述到了实习经验对找工作的帮助 1.2.2大学阶段的实习经验能帮到你 一般公司在筛选简历时,一个非常重要考察的要点是相关经验的工作年限,说一个 ...

  9. APUE 3 -- 信号(signal)<I> :概念

    信号可以理解成一种软件中断.他提供了一种异步处理事件的方式.每个信号都有一个与之对应的信号名,这些信号名都带有SIG前缀,如:SIGABRT,SIGALARM.头文件signal.h 中定义了所有的信 ...

  10. 7.7 WPF后台代码绑定如果是属性,必须指定一下数据上下文才能实现,而函数(click)就不用

    如: private bool _IsExportWithImage; /// <summary> /// 是否选择导出曲线图 /// </summary> public bo ...