Java开端~数据类型与运算符(你忽视了么?)

前言

数据类型与运算符虽然简单,并且在很多地方都和C语言相同。但是我们也要注意这些细节,以及他们的不同之处,防止写代码的时候总会踩入一些不必要的坑!

变量的命名规则

硬性指标:

  1. 一个变量只能包含数字、字母、下划线
  2. 不能以数字开头
  3. 变量名大小写敏感,例如:num和Num是两个不同的变量

注意:虽然语法上也允许使用中文\美元符($)命名变量,但是强烈建议不要这样做!

软性指标:

  1. 变量命名要具有描述性,见名知意。
  2. 变量名不建议使用拼音(但是不绝对)。
  3. 变量名的词性推荐使用名词。
  4. 变量命名推荐小驼峰命名,当一个变量名是由多个单词构成的时候,除了第一个单词之外,其他单词首字母都大写

例如:int minValue = 1;

​ String studentName = “某某”;

数据类型

整型

学习C语言时,我们知道int变量在32位计算机下占4个字节,在64位占8个字节,但是在JAVA中,一个int变量4个字节,和操作系统没有直接关系!!!同理可得,其他类型也是如此!这也间接地体现了JAVA的安全性

类型 空间大小 数据范围 语法格式举例
byte 1 -2^7 ~ +2^7-1 byte value = 0;
short 2 -2^15 ~ +2^15-1 short value = 0;
int 4 -2^31 ~ 2^31-1 int num = 10;
long 8 -2^63 ~ 2^63-1 long num = 10L;

我们还可以通过JAVA中包装类的成员变量来查看数据取值范围。

例如:System.out.println(Integer.MAX_VALUE); // int 的最大值

​ System.out.println(Integer.MIN_VALUE); // int 的最小值

注意事项:

  1. long型变量在初始化时,数据后面要加L,当然大小写都可以,但是为了区别数字1,用大写会更好一点。
  2. byte字节类型表示的也是整数,和字符类型互不相干!
  3. short一般不推荐使用。

浮点型

JAVA中的浮点数的内存布局和整数差别很大,不能单纯的用 2 ^ n 的形式表示数据范围。内存布局遵守 IEEE 754 标准(和C语言一样),尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差。float同样遵守 IEEE 754 标准, 由于表示的数据精度范围较小,一般在工程上用到浮点数都 优先考虑 double,不太推荐使用 float。并且若小数形式后面不写f或F来标识,那计算机会自动认为该数字为double型

类型 空间大小 语法格式举例
float 4 float num = 1.0f;
double 8 double num = 1.0;

字符型

计算机中的字符本质上是一个整数。 在 C 语言中使用 ASCII 表示字符,而 Java 中使用Unicode 表示字符。因此一 个字符占用两个字节,表示的字符种类更多,包括中文。

语法格式举例:char ch = ‘啊’;

代码中如果使用一个字符表示一个汉字

则执行javac时需要加上 -encoding UTF-8 例如:javac -encoding UTF-8 Test.java

布尔类型

在C语言中0为假,非0为真,而在java中却不是这样的。java中用boolean类型的变量来表示,且只有两种取值true表示真,false表示假。对于boolean类型的空间大小,有些JVM中占1个字节,有些是占1个比特位,没有明确规定空间大小

boolean value = true; 
System.out.println(value + 1); 
 
// 代码编译会出现如下错误 
Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误
    System.out.println(value + 1);
                             ^
    第一个类型:  boolean   
    第二个类型: int 1 个错误 

字符串类型

String不是基本类型,而是引用类型。字符串中的数据存储在常量池中,且一些特定的不太方便直接表示的字符需要进行转义。

语法格式示例:String name = “张三”;

字符串的+操作,表示字符串拼接:

String a = "hello";
String b = "world";
String c = a + b;
System.out.println(c);//输出结果helloworld

还可以用字符串和整数进行拼接:

String str = "result = "; 
int a = 10; 
int b = 20; 
String result = str + a + b; 
System.out.println(result); // 执行结果 result = 1020

常量

在C语言中有const 限定,使变量变成常量。而java使用final来限定的!当然这里也分为字面值常量(例如:10)和final关键字修饰的常量。那么变量和常量有什么区别呢?变量在运行期间可以改变的,并且是在运行的时候才能知道它的值;而常量在运行期间不能改变,并在编译期间就可以确定它的值!

final int a = 10;
a = 20;// 编译出错. 提示 无法为终变量a分配值

类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有较严格的校验。

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行。
  2. 毫不相干的两种类型, 不能相互赋值。
  3. 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理。
int a = 10;
long b = 20;
a = b;         // 编译出错, 提示可能会损失精度.
b = a;         // 编译通过. 

强制类型转换:

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型。
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.。
  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。
int a = 0; 
double b = 10.5; 
a = (int)b; 
 
int a = 10; 
boolean b = false; 
b = (boolean)a;          // 编译出错, 提示不兼容的类型.

不同类型的数据混合运算, 范围小的会提升成范围大的。由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算。

运算符

java中的大部分运算符和C语言中还是一样的,那接下来我们就说一下一些特殊情况以及新增运算符!

  1. % 表示取余, 不仅仅可以对 int 求模, 也能对 double 来求模

    System.out.println(11.5 % 2.0);  // 运行结果 1.5
    
  2. 在C语言中我们可能会有这样的表达式:!0;但是在java中这是不可行的,"!"运算符只能作用于布尔表达式上。

  3. i++的特殊情况你知道吗?

    int i = 10;
    i = i++;
    System.out.println(i);//结果为10
    
  4. 新增无符号右移运算符">>>"。

    int a = 0xffffffff; 
    System.out.printf("%x\n", a >>> 1);  
    // 运行结果(注意, 是按十六进制打印的) 7fffffff 
    

猜你喜欢

转载自blog.csdn.net/zSoaring/article/details/107423441