数据类型和类型的转换与提升

java里的很多小知识点

  1. 变量和类型 :我们都知道,变量是程序在运行时,开辟一块内存空间来保存数据的可变的量,不同的变量有不同的类型,主要概括为如下的类型,当然还有一部分有待完善。
  2. 在数据类型上,java语言与C中的不同: java吸收了C++语言(也就是C语言的继承语言)的优点,同时摒弃了一些概念。在以上数据类型中有些与C不同的地方: 1、在C语言中int类型在不同的编译器上所占的字节大小是不一样的,但是在java中是固定的; 2、在C语言中char类型是以ASCII码存放,255种在java中用unicode的编码方式存放,包括一些汉字特殊符号以及其他语言。
  3. 常量 常量包括俩种常量,一是字面常量,例如20,30L,‘a’以及“hello”等不同类型的常量。另外一种是final修饰的常量,在使用final修饰的常量的时候,定义和初始化不一定要在同一时间实现,但是一旦初始化就不能再初始化了。如下常量: final int a = 10; a = 20; // 编译出错. 提示 无法为最终变量a分配值
  4. 不同的类型之间的转换: 1、范围更小的可以饮食转换成范围大的类型; 2、范围大的需要赋值给范围小的时,需要进行强制类型转换,但是可能会发生精度丢失的情况; 3、互不相干的类型(布尔与其他基本类型)之间无法转换; 4、String与int之间的转换: 例如整形变量numint num = 10;可以使用一下俩种方法进行转换: ① String str2 = String.valueOf(num); ② String str1 = num + “”; 在使用第二种方法注意:一旦使用+进行拼接字符串与数值时,只要凭借内容里面有字符串那么所有的数值类型的变量都会变成字符串,从而不进行数值的运算。
  5. 类型提升 —例1:int 与 long 之间的赋值 int a = 10; long b = 20; long d = a + b; // 编译通过 int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度 注:非要将a+b赋值给c时,就要用到强制转换-->int c = ( int )(a+b);将其结果强转成int 型,方可编译通过。 —例2:不同类型的数值运算过程中的数值提升 在java中,CPU从内存中取值时是以4个字节为单位进行读取,同样的算是以空间换区时间的做法,将不满4字节的数值类型进行提升为4个字节,当进行运算的俩个数据类型不同时,会将小范围类型自动提升为大范围类型的数值,主要是为了方便快捷的进行计算。如下: short s = 10; s = s+20; // 在上面的语句里,20是一个int型数值,运算时会将s提升成为int,所以右值其实是一个int型的数值,当然不能直接赋值给short短整型的s,所以编译会报错。 但有意思的是s += 20;(与上面代码等价) 在编译时可以通过,这是为什么呢? 原来是因为+= 是复合运算符,复合运算符会自动帮我们转化数值类型,类型转换好了就没问题啦,所以编译可以通过。
  6. Java语言的优点之二: 一、安全性: Java适用于网络/分布式环境。为了达到这个目标,在安全性方面投入了大量的精力。使用Java可以构建防病毒、防篡改的系统。 从一开始,Java就设计成能够防范常见的各种攻击: 1、运行时堆栈溢出。蠕虫和病毒常用的攻击手段。 2、破坏自己进程空间之外的内存。 3、未经授权读写文件 例如:针对数字范围的检查:如果超出类型所表示的范围时,会直接编译报错; 二、跨平台性: 在不同系统上,会有许多不兼容的内容,例如int的长度在不同操作系统里面就不一样,甚至于连字节排列的顺序都不同,调用同一个函数返回的格式也不同等等这些问题。在java中操作系统不需要去考虑这些问题,操作系统直接将兼容的工作丢给了JVM,编译好的文件不直接与机器的操作系统对应,通过JVM间接与操作系统交互,将结果解释给操作系统。就解决了这个问题,方便很多。JVM在哪里呢?以下为JDK JRE JVM之间的关系图:
经验分享 程序员 微信小程序 职场和发展