java数据类型怎样理解_Java 数据类型の理解

1、数据类型分为内置类型和引用类型,等等基础概念,不再详细阐述,很多博客上面有进行介绍。

2、Something  About Integer

Java (JVM)中看到不带小数点的数(即整数),则默认将该值分为int 类型。若需存储足够大的整数,=> long number = 88888888L ;

Q1:byte 所占为1 btye = 8 bit , 为毛其是范围:-2的7次方~2的7次方-1(1111,1111~0111,1111),即-128~127?

A1:整数为带符号的数,最高位在0、1代码中表示符号位 (0正1负),余下7位来根据十进制=>二进制关系,来存放该数的绝对值。

Q2:既然所有整数视为int ,为毛还需引入不同的数据类型?

A2:例如,byte类型虽然在语义(逻辑)上是占用1字节,但实际上,JVM中是将其当做int看的,也就是事实上是占用了32位,4字节的,所以其运算效率和int没区别,short也一样。

之所以要有byte/short类型,一是因为某些地方要明确使用这些范围类型(个人理解为给人看的,而非给机器声明,因为机器为默认分配4 byte.)。二是,在byte[]数组中,JVM存储的则是真的1字节,short[]2字节。(但也有的JVM其byte[]数组也是4字节1位)

Q3:十进制、八进制、十六进制整数区别?

A3:对于同一个数(10),三者(十进制:10,十六进制:A,八进制:12)在内存中都是0、1代码,只不过是根据其进制对应法则,展示的效果不同而已。默认int a= 10 ,是按十进制格式输入输出。也可以输出八进制 int a =012 (数字前面加0,表示八进制格式) 、十六进制 int b =0xA(对应数字前加0x 或者 0X,表示十六进制格式)。

Q4:

char b = 'a' + 18;

char a = 'a' ;

char b = a + 18;

前者语句不报错,后者语句报错:错误:不兼容的类型。为毛?

A4:关于第一句 字符常量'a' 使用Unicode , 实际存储是转换为整数特定值来代表该字符,整数之间可以进行运算,将运算完的结果再转换为char 对应字符输出。(逻辑上可以这样理解)

第一句的,其他理解是:javac在编译的时候就直接把 char b = 'a' + 18 编译成 char b = 's' 了 。   (p.s.两种理解方式,本人未学过汇编,具体机器执行过程不清楚,第二种更准确更深入。)

关于第二句:a 是变量,jvm不知道具体的a是多少,所以进行算数运算的时候,会自动把char类型的'a'转为int类型的97,然后在进行算数运算,之后就需要强转为char了。

若需解决第二局的错误,进行强制类型转换。

char a = 'a' ;

char b = (char)(a+18);

3、 具体例子说明

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值