Java数据类型

一个Java对象占用多大内存

Object 占用空间头(8+4)+padding(4)=16字节

Integer长度为:头(8+4)+ int(4) = 16字节

Long长度为:头(8+4)+long(8)+padding(4)=24字节

数组对象占用的内存是 8 + 4 + 4 = 16个字节,不包括数组内成员的内存。

ArrayList: 头部(8+4)+int(4)+int(4)+数组引用(4)=24字节

Map<String,String> map = new HashMap<>(); 
占用空间情况:48+16=64字节,当HashMap初始化的时候,他会开辟一个长度为16的table数组。
然后put进去一条数据:map.put( “100002”, “张明”); 264字节
key(String):56字节
value(String) :48字节
next :因为就只有一个元素,所以next值为null,0字节
entrySet:为空指针,0字节
keySet:空指针,0字节
values:空指针,0字节
综上分析,这个map占用48+216+0+0+0=264字节。加上keySet和entrySet:总大小为 296+16=312字节

原文链接:https://blog.csdn.net/belongtocode/article/details/103377187

char

int i = 0xffff004b;
char b = (char)i;
由于int为4个字节,char为2个字节,强行转换可能会丢失2个高位字节的数据.

JAVA数据类型中的char类型

1、JAVA中,char2字节,16位。可在存放汉字
2char赋值
char a='a'; //任意单个字符,加单引号。
char a='中';//任意单个中文字,加单引号。
char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
注:只能放单个字符。
3char运算
char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。
在JAVA中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。

示例1char m='a'; //a
char m='a'+'b';//? char类型相加,提升为int类型(a和b分别对应的数值为97和98,相加等于195,其对应的字符为?)
int m='a'+'b'; //195  没有超出int范围,直接输出195。
char m=197; //?  输出字符编码表中对应的字符。
char m='197; //报错,因为有单引号,表示是字符,只允许放单个字符。
char m='a'+1;//b  提升为int,计算结果98对应的字符是b
char m='中'+'国'; //42282
char m='中'+'国'+'国'+'国';//报错,int转char有损失,结果已经超出char类型的范围。
int m='中'+'国'+'国'+'国';//86820
char m='中'+1;//丮  //1是int,结果提升为int,输出对应的字符。
char m='中'+"国";-->报错         //String无法转换为char。
System.out.println('中'+"国");//中国, 没有变量附值的过程。String与任何字符用“+”相连,转换为String。

示例2char a = 97; //为char类型变量 a 赋值常量值 97。
char b = 'a'+3;//d, 97+3=100,ASCII对应的字符为 d。
char c = a+3;//报错, 无法从int类型转换为char类型,接下来让我们了解下为什么会不能这样运算:
首先,我们先知道在jvm内存机制中,char类型数据运算是将字符在ASCII表对应的整数以int类型参与运算(可以认为' a '=97),常量(97)与常量(3)运算得到一个新的常量(100),常量赋值给变量(b),不存在强制转换,只要这个接受变量(b)的类型范围大于这个常量即可。而变量声明时需要定义数据类型(例:char a),内存就为这个变量划分一个char类型大小的空间,其中变量(a)的值是可变的,而常量(3)的值是不变的,两个运算得到的还是一个变量,本例中(a+3)是int类型的变量,而int类型变量(a+3)赋值给char类型变量(c)需要强制转换,因此会报错。

总结
char c=(char)(a+3); //d  char用单引号''标识,只能放单个字符。char+char,char+int的类型均提升为int,附值char变量后,输出字符编码表中对应的字符。

double

double 在计算时精度丢失的问题
https://blog.csdn.net/AD_plus/article/details/90694399

System.out.println(0.1+0.2); //0.30000000000000004

浮点数由两部分组成:指数和尾数,在这个转换的过程中,浮点数参与了计算,那么转换的过程就会变得不可预 知,并且变得不可逆。我们有理由相信,就是在这个过程中,发生了精度的丢失。

bigdecimal构造函数使用不当时,结果仍然异常
BigDecimal a = new BigDecimal(0.1);
BigDecimal b = new BigDecimal(0.2);
System.out.println(a.add(b)); //0.3000000000000000166533453693773481063544750213623046875

请写出下列的运算结果

public class Test{
    public static void main(String[] args) {
        //239.0 integer division in floating-point context
        double vol = Integer.parseInt("23980", 16) / 100;
}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种面向对象的程序设计语言,有许多内置的数据类型供开发者使用。这些数据类型可以帮助我们在程序中定义不同类型的变量,并对这些变量进行操作和处理。 Java数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型包括整型、浮点型、字符型和布尔型,用于存储简单的数据值。引用数据类型则是指对象类型,用于存储复杂的数据结构。 在进行Java数据类型实验时,可以通过创建不同类型的变量来演示它们的特性和用法。例如,可以创建一个整型变量来存储一个整数值,使用运算符对其进行加减乘除等运算,并将结果输出到控制台上。 另外,也可以尝试使用浮点型数据类型来储存实数值,对其进行各种算术运算,以及比较大小、取整等操作。字符型数据类型可以用来存储单个字符,例如创建一个字符变量来表示一个字母,使用各种字符相关的方法对其进行处理。 布尔型数据类型则用于存储逻辑值,即真或假。可以通过创建一个布尔变量,并使用逻辑运算符对其进行逻辑判断,以及进行条件语句的控制。 此外,还可以进行引用数据类型的实验,例如创建一个字符串对象,使用字符串类的各种方法对其进行处理。还可以创建一个自定义的类,例如创建一个学生类,定义各种属性和方法,实验对象的创建、属性的访问和方法的调用。 总之,Java数据类型实验可以帮助我们深入了解不同类型的数据在程序中的存储和处理方式,从而更好地应用和扩展Java语言的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值