【Java基础知识点+易混淆点(1)】之数据类型与变量

  • 在Java中,main所在的类的名字必须要与文件名一致。
  • 在Java中,没有全局变量的说法,所有方法以及变量必须要定义在类中。
  • 常量即程序运行期间一直不变的量。
  • 在Java中,数据类型主要分为两类:基本数据类型(也叫内置数据类型)和引用数据类型。
  • 基本数据类型分为四类八种,如下所示

在这里插入图片描述

  • 关于Java基础数据类型值得注意的点:
    (1)整形和浮点型都是有符号的;
    (2)整形默认为int,浮点型默认为double;
    (3)在任何系统下,byte都占1个字节、short都占2个字节、int都占4个字节、long都占8个字节、double都占8个字节;
    (4)在 Java 中float占4个字节,由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double;
    (5)计算机中字符本质是整数,在C语言中用ASCII表示字符、在Java中则用Unicode表示字符,因此在Java中char占2个字节-----可表示的字符种类更多,包括中文;
    (关于Unicode更多详情指路大佬这边-----https://zhuanlan.zhihu.com/p/35172335)
    (6)boolean类型并没有明确的规定内存占用字节个数;
    (更多比较严谨的说明指路大佬这边-----https://blog.csdn.net/amoscn/article/details/97377833)
    (7)浮点数与整数在内存中的储存方式不同,所以浮点型不能单纯的使用2^n的形式来计算;又因为其内存布局遵守IEEE 754标准(和C语言一致),用有限的内存空间表示可能无限的小数----导致存在一定的精度误差,因此浮点数是近似值而非精确值;
    (4)float、long类型书写规范:
下面是不注意就容易写成这样的错误形式
//这是一种会报错的错误写法!
long a=2^31;    //超出了默认int型的范围
float b=3.14;
在上面情况中,由于整形默认为int类型,long长整型赋值一
个超出int范围的值是会编译不通过的;由于浮点型默认
double类型,float与double不兼容,所以也会编译不通过。
下面是正确格式
long a=2^31L;
float b=3.14f;
  • 在Java中,当整型数字(字面值常量)给整型变量赋值时,编译器会自动检测该数据是否超过该变所对应的数据类型(所以就算一开始默认成int类型对byte、short类型也没有影响);但是当使用变量来赋值的时候,编译器就不会去检测了。
示例代码如下:
int a=100;
short s=200;
byte b=50;  
//上面这三种中的赋值号后面都是默认int类型,但是编译器会自动检测范围是否符合赋值号左侧的数据类型

b=100;//正确,byte类型的变量b再次赋值,符合byte范围
b=a;//错误,编译直接不通过,原因有二:1、a是int类型会强制类型转换;2、当使用变量赋值时,编译器不会去检测范围
  • 类型转换: Java是一种强类型编程语言,当不同类型之间的变量相互赋值的时候,会有较为严格的检验;Java中的类型转换主要分为两种:自动类型转换(隐式)和强制类型转换(显式)
  • 隐式类型转换:在编译期间,编译器自动进行转换;特点为将数据范围小的类型自动转换成数据范围大的类型。
  • 显式类型转换:编译器不会进行自动转换,需要手动进行转换;特点为将数据范围大的类型转换为小的类型时会报错,需要手动进行转换。
  • 关于类型转换需要注意的点:
    (1)如果把范围大的类型赋值给范围小的,需要强制类型转换,但是可能会发生精度丢失;
    (2)强制类型转换不一定能成功,不相干的类型不能互相转换;
    (3)将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查;
    (4)不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围更大的类型。
  • 类型提升:
  • (1)不同类型的数据之间互相运算时,数据类型小的会被提升到数据类型大的。
示例代码如下:
int a=10;
int b=20;
int c=a+b;//错误,编译报错 因为a+b类型提升成 long+long---结果也为long,赋值给int时可能会精度丢失
long d=a+b;//正确
  • (2)对于byte、short类型,比4个字节小会先提升成4个字节的int类型,再进行运算。
    原因:由于计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了让硬件方面操作更方便,所以会让低于4个字节的byte、short类型先提升再运算。
示例代码如下:
byte a=10;
byte b=20;
byte c=a+b;//错误,编译报错 因为a+b会提升为int+int 结果为int再赋值给byte类型并不兼容,可能会精度丢失
byte c=(byte)(a+b);//正确,进行强制类型转换
  • 字符串类型: 在Java中使用String类定义字符串类型,在有些情况下需要将字符串和整型数字之间进行转换。
示例代码如下:
//1.int类型转成String
int num=10;
String str1=num+"";//方法一
String str2=String.valueOf(num);//方法二

//2.String转成int
String str="100";
int num=Integer.parseInt(str);
  • 引申:关于字符集、字符编码。字符集就是字符的集合;字符编码就是按照一定规则对不同的字符进行存储,例如UTF-8、GB2312、GBKB(关于字符集、字符编码更多详情指路大佬这边------https://www.shangmayuan.com/a/a6a95d9f8c9c402f882a13d6.html)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值