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. SQL语句查询某字段不同数据的个数(DISTINCT 的使用)

    今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有多少: SQL语句: SELECT  COUNT(DISTINCT  VchReg)  from  VF ; 其中 ...

  2. ASP.NET MVC最新特性

    问题: 既然我说对ASP.NET MVC很熟很懂,对新技术很感兴趣,那么问题是: 当前最新版MVC是什么?你用的哪个版本?相比前一个版本有什么新的特性? 解析: 在面试的时候,为了争取面试官的好感,显 ...

  3. SQL实现 模糊查询(转)

    在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任 ...

  4. JSP 页面传值方法总结

    JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总结下来,需要时可以进行权衡利弊选择最合适的方式. 1. URL 链接后追加参数 <a href=&quo ...

  5. Java的HashMap实现原理整理总结

    通过Debug 探寻Java-HashMap 实现原理: 一个简单的例子,代码如下, 测试方法 main: public static void main(String[] args) { KeyOb ...

  6. Mysql 掌握要点

    1. 引擎 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁. 行级锁和表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题. 1.1 I ...

  7. 简述C/C++调用lua中实现的自定义函数

    1.首先说下目的,为什么要这么做 ? 正式项目中,希望主程序尽量不做修改,于是使用C/C++完成功能的主干(即不需要经常变动的部分)用lua这类轻量级的解释性语言实现一些存在不确定性的功能逻辑:所以, ...

  8. jQuery的基础跟JS的正则

    大家好,我是唯芸星,这是我的一点点学过的知识,呈现给大家                   1:正则表达式 包括: 1:正则表达式包括两部分 ①:定义正则表达式的规则 ②:正则表达式的规模(i/g/ ...

  9. 初学者入门web前端 C#基础知识:数组与集合

    对于初学者,想要入门web前端,要有足够的信念和坚持,不然只会越走越远,我现在就深深的体会到. 我本是一个很拒绝代码的人,以前想过UI设计,但是在这段学习时间里,发现其实只要认真,代码并不是很难 所以 ...

  10. ios 初体验<UIButton 控件>

    1.创建UIButton 跟其他方式不同,不是直接alloc,init 创建 用工厂化方式创建 UIButton *sureBtn = [UIButton buttonWithType:UIButto ...