【Java SE】java 中变量和表达式计算的相关问题
@[toc]
一、变量
1.概念、语法格式以及分类
概念:这些经常改变的内容,在 Java 程序中,称为变量。
语法:数据类型 变量名 = 初始值;
分类:与基本数据类型(如下表所示)相对应
2.注意
1)不初始化是否报错问题
作为类成员变量,无论初始化与否都不会出错。
作为函数代码里的变量,无论什么类型不初始化全部都会报错。
成员变量会被系统默认初始化,局部变量必须得手写初始化
注:成员变量是指在类体的变量部分中定义的变量,也称为属性。成员变量声明在类中,方法体之外。
2)变量范围与超过范围是不是报错问题
当我们采用表达式打印超过范围的数时可以通过编译,但其实它会溢出,最后得到一个不符合预期的数值 。
3)其他
为了区分 int 和 long 类型,一般建议:long 类型变量的初始值之后加 L 或者 l ,同时,为了明显区分数字 1 和小写 l,我们一般写 L。
double /float 类型的内存布局遵守 IEEE 754 标准(和 C 语言一样), 使用有限的内存空间表示可能无限的小数, 一定会存在一定的精度误差,所以浮点数都是近似值。同时,由于 float 比 double 范围小,所以会优先使用 double 类型。
Java 的
boolean
类型和 int 不能相互转换, 不存在 1 非 0 表示 true, 0 表示 false 这样的用法,同时也不存在这样的运算boolean value = true;
System.out.println(value + 1);
会编译报错。【编译时可以检查出语法错误】
jvm
规范中没有说boolean
占几个字节,但是在 Oracle 公司的虚拟机实现中,boolean
占 1 个字节。除法分为整数除法和小数除法,这点与 C 类似。
单精度后边是写 f 或者 F,当我们定义时不些的时候会发生隐式类型转换。
java 中的 char 采用的是 Unicode 编码,并且是两个字节,所以可以放中文。
【在使用命令窗口编译时,如果在执行出现不能正确解析汉字的情况,那么这时需要加入一条语句,参考之前写的 java程序运行那篇笔记】
3.拓展
1.Unicode 字符集不仅可以表示英文还有希腊文、中文等其他国家的语言,向下兼容 ASCII 字母集,但其实我们做题只是绝大多数时候用的 ASCII 里边的,所以没有必要再去专门研究这个字母集。
2.谈论 char 的最小最大其实没有太大意义。他们没有符号位【所以共有 65535 个】,本质上是字符,但是我们经常用的 IDEA 无法正常解析出来,并且他也没有太大的应用场景。
二、有关表达式计算中的类型问题【!!!】
这里的大小是指表示能力。
1.类型转换
1)小转大——隐式类型转换
2)大转小——强制类型转换
注意
没有意义,但是可以:比如 double&char【打印的都是字符,同时 double 会把小数丢了】
对于不相干的类型,存在强制类型转换也不行钉子户,最典型的就是布尔类型和其他任何类型。
2.类型提升
运算时,不同但属于同一大类进行计算时小类型会提升至大类型,与 C 是一样的。
同时 java 与 C 一样,整型算术运算总是至少以缺省【缺省即默认】整型类型的精度来进行的。
这里我们经常看到的就是,byte 运算时的整型提升、int 到 long 的、float 到 double。
版权声明: 本文为 InfoQ 作者【安苒】的原创文章。
原文链接:【http://xie.infoq.cn/article/c8fc7107283dacea749402ebb】。文章转载请联系作者。
评论