java 数据类型的定义与运算案例
- Ⅰ、java 数据类型:
- 1、 变量按照数据类型来分:
- 2、 变量在类中声明的位置来分:
- Ⅱ、基本数据类型:
- 1、整型:
- 其一、代码为:
- 其二、截图为:
- 2、浮点型:
- 其一、代码为:
- 其二、截图为:
- 3、字符型:
- 其一、代码为:
- 其二、截图为:
- 4、布尔型:
- 其一、代码为:
- 其二、截图为:
- 5、基本数据类型之间的运算规则之一:自动类型提升
- 其一、代码为:
- 其二、截图为:
- 6、基本数据类型之间的运算规则之二:强制类型转换
- 其一、代码为:
- 其二、截图为:
- 7、char 类型不常见的赋值情况:
- 其一、代码为:
- 其二、截图为:
- 8、变量运算规则的两个特殊情况:
- 其一、代码为:
- 其二、截图为:
- Ⅲ、String 类型变量:
- 其一、代码为:
- 其二、截图为:
- Ⅳ、String 与基本数据类型间运算的案例:
- 1、案例1:
- 其一、代码为:
- 其二、截图为:
- 2、案例2:
- 其一、代码为:
- 其二、截图为:
- 3、案例3:
- 其一、代码为:
- 其二、截图为:
- 4、案例4:
- 其一、代码为:
- 其二、截图为:
- 5、案例5:
- 其一、代码为:
- 其二、截图为:
- 6、案例6:
- 其一、代码为:
- 其二、截图为:
- Ⅴ、小结:
Ⅰ、java 数据类型:
1、 变量按照数据类型来分:
基本数据类型:
整型:byte \ short \ int \ long
浮点型:float \ double
字符型:char
布尔型:boolean
引用数据类型:
类(class)(注意:字符串是一个类 类型的)
接口(interface)
数组(array)
2、 变量在类中声明的位置来分:
成员变量 vs 局部变量
Ⅱ、基本数据类型:
1、整型:
整型包括:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)
① byte范围:-128 ~ 127;
② 声明long型变量,必须以 “l” 或 “L” 结尾;
③ 通常,定义整型变量时,使用 int 型;
其一、代码为:
class VariableTest1 {public static void main(String[] args) {//1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节) //① byte范围:-128 ~ 127 // byte b1 = 12; byte b2 = -128; //b2 = 128;//编译不通过(因为超过了 byte 的范围) System.out.println(b1);//12 System.out.println(b2);//-128 // ② 声明long型变量,必须以"l"或"L"结尾 // ③ 通常,定义整型变量时,使用int型。 short s1 = 128; int i1 = 1234; long l1 = 3414234324L; System.out.println(l1);//3414234324 } }
其二、截图为:
2、浮点型:
浮点型:float(4字节) \ double(8字节)
① 浮点型,表示带小数点的数值;
② float 表示数值的范围比 long 还大;
③ 定义 float 类型变量时,变量要以 “f” 或 “F” 结尾;
④ 通常,定义浮点型变量时,使用 double 型;
其一、代码为:
class VariableTest1 {public static void main(String[] args) {//2. 浮点型:float(4字节) \ double(8字节) //① 浮点型,表示带小数点的数值 //② float表示数值的范围比long还大 double d1 = 123.3; System.out.println(d1 + 1);//124.3 //③ 定义float类型变量时,变量要以"f"或"F"结尾 float f1 = 12.3F; System.out.println(f1);//12.3 //④ 通常,定义浮点型变量时,使用double型。 } }
其二、截图为:
3、字符型:
字符型:char (1字符=2字节)
① 定义char型变量,通常使用一对 ’ ’ ,内部只能写一个字符;
② 表示方式(即:声明 char 型变量的几种表示方式):
a.声明一个字符;
b.转义字符;
c.直接使用 Unicode 值(即:十六进制)来表示字符型常量;
其一、代码为:
class VariableTest1 {public static void main(String[] args) {//3. 字符型:char (1字符=2字节) //① 定义char型变量,通常使用一对'',内部只能写一个字符 char c1 = 'a'; //c1 = 'AB'; //编译不通过,因为 char 型变量内部只能写一个字符; System.out.println(c1);//a char c2 = '1'; char c3 = '中'; char c4 = 'ス'; System.out.println(c2);//1 System.out.println(c3);//中 System.out.println(c4);//ス //② 表示方式(即:声明 char 型变量的几种表示方式): //1.声明一个字符 2.转义字符 3.直接使用 Unicode 值(即:十六进制)来表示字符型常量 char c5 = '\n';//换行符,\n并不是两个字符,而是一个转义字符; c5 = '\t';//制表符(即:类似 Tab 键的制表符); System.out.print("hello" + c5); System.out.println("world");//hello world char c6 = '\u0043'; System.out.println(c6);//C } }
其二、截图为:
4、布尔型:
布尔型:boolean
① 只能取两个值之一:true 、 false;
② 常常在条件判断、循环结构中使用;
其一、代码为:
class VariableTest1 {public static void main(String[] args) {//4.布尔型:boolean //① 只能取两个值之一:true 、 false //② 常常在条件判断、循环结构中使用 boolean bb1 = true; System.out.println(bb1);//true boolean isMarried = true; if(isMarried){System.out.println("你就不能参加\"单身\"party了!\\n很遗憾"); //你就不能参加"单身"party了!\n很遗憾 }else{System.out.println("你可以多谈谈女朋友!"); } } }
其二、截图为:
5、基本数据类型之间的运算规则之一:自动类型提升
前提:这里讨论只是 7 种基本数据类型变量间的运算。不包含 boolean 类型的。
自动类型提升:
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。 byte 、char 、short --> int --> long --> float --> double;
特别的:当 byte、 char、 short 三种类型的变量做运算时,结果为 int 型;
说明:此时的容量大小指的是,表示数的范围的大和小(而不是其占用空间的大和小);
比如:float 容量要大于 long 的容量(即:表示数范围的大小);
其一、代码为:
class VariableTest2 {public static void main(String[] args) {byte b1 = 2; int i1 = 129; //编译不通过(因为:byte 类型与 int 类型的运算结果应该是 int 类型) //byte b2 = b1 + i1; int i2 = b1 + i1; long l1 = b1 + i1; System.out.println(i2);//131 System.out.println(l1);//131 float f = b1 + i1; System.out.println(f);//131.0 short s1 = 123; double d1 = s1; System.out.println(d1);//123.0 //***************特别地********************* char c1 = 'a';//97 int i3 = 10; int i4 = c1 + i3; System.out.println(i4);//107 short s2 = 10; //short c2 = c1 + s2;//编译不通过(因为:char 类型与 short 类型的运算结果应该是 int 类型) //char c2 = c1 + s2;//编译不通过(因为:char 类型与 short 类型的运算结果应该是 int 类型) byte b2 = 10; //byte c3 = c1 + b2;//编译不通过(因为:char 类型与 byte 类型的运算结果应该是 int 类型) //char c3 = c1 + b2;//编译不通过(因为:char 类型与 byte 类型的运算结果应该是 int 类型) //short s3 = b2 + s2;//编译不通过(因为:byte 类型与 short 类型的运算结果应该是 int 类型) //byte s3 = b2 + s2;//编译不通过(因为:byte 类型与 short 类型的运算结果应该是 int 类型) //short s4 = b1 + b2;//编译不通过(因为:byte 类型与 byte 类型的运算结果应该是 int 类型) //byte s4 = b1 + b2;//编译不通过(因为:byte 类型与 byte 类型的运算结果应该是 int 类型) //**************************************** } }
其二、截图为:
6、基本数据类型之间的运算规则之二:强制类型转换
强制类型转换:自动类型提升运算的逆运算;
A、需要使用强转符:();
B、注意点:强制类型转换,可能导致精度损失;
其一、代码为:
class VariableTest3 {public static void main(String[] args) {double d1 = 12.9; //int i1 = d1;//编译不通过(因为:double 类型不能自动类型提升为 int 类型,因此编译报错) //精度损失举例1 int i1 = (int)d1;//截断操作 System.out.println(i1);//12(此时是将 double 类型强制转换为 int 类型,会有精度损失) //没有精度损失 long l1 = 123; short s2 = (short)l1;//123(此时是将 long 类型强制转换为 short 类型) //精度损失举例2 int i2 = 128; byte b = (byte)i2; System.out.println(b);//-128(此时是将 int 类型强制转换为 byte 类型,会有精度损失) } }
其二、截图为:
7、char 类型不常见的赋值情况:
其一、代码为:
class ReviewTest{public static void main(String[] args){char c1 = 'a'; char c2 = 97;//开发中非常少见(即:直接写 ACSII 对应的数值) System.out.println(c2);//a char c3 = 5; char c4 = '5'; char c5 = 53; int i1 = (int)c4; // 其实直接 int i1 = c4; 赋值是 ok 的(即:自动类型转换); System.out.println(c4);//5 System.out.println(c5);//5 System.out.println(i1);//53(即:此时输出的是 5 所对应的 SCII 值) } }
其二、截图为:
8、变量运算规则的两个特殊情况:
其一、代码为:
class VariableTest4 {// 变量运算规则的两个特殊情况: public static void main(String[] args) {//1.编码情况1: long l = 123213; // 此时的 123213 默认是 int 类型,然后再赋值给 long 型(即:自动类型提升); // 而 123213l 默认是 long 型; System.out.println(l);//123123 //编译失败:过大的整数 //long l1 = 21332423235234123;//此时超过 int 的范围而未超过 long 的范围就会报错(但本不应该报错); long l1 = 21332423235234123L;//此时超过 int 的范围而未超过 long 的范围就不会报错; //**************** //编译失败 //float f1 = 12.3;//此时的 12.3 默认是 double 类型,因此会报错(因为丢失精度); float f1 = (float)12.3; //2.编码情况2: //整型常量,默认类型为int型 //浮点型常量,默认类型为double型 byte b = 12; //byte b1 = b + 1;//编译失败,此时应该用 int 型来接收,因为常量 1 默认是 int 类型; int b1 = b + 1; // 此时的编译没有问题; //float f1 = b + 12.3;//编译失败,此时应该用 double 型来接收,因为常量 12.3 默认是 double 类型; double f11 = b + 12.3; } }
其二、截图为:
// 说明:此上代码编译都能通过,语法没有问题;
Ⅲ、String 类型变量:
String 类型变量的使用:
①. String 属于引用数据类型,翻译为:字符串
②. 声明 String 类型变量时,使用一对""(即:英文双引号)
③. String 可以和 8 种基本数据类型变量做运算,且运算只能是连接运算:+
④. 运算的结果仍然是 String 类型
其一、代码为:
class StringTest {public static void main(String[] args) {String s1 = "Hello World!"; System.out.println(s1);//Hello World! String s2 = "a"; String s3 = ""; //char c = '';//编译不通过,此时需要声明为' '或'a',编译才没有问题; //即:char 声明变量有且仅能放一个字符(即:少了多了字符,编译都会报错); } }
其二、截图为:
Ⅳ、String 与基本数据类型间运算的案例:
1、案例1:
其一、代码为:
class StringTest {public static void main(String[] args) {//*********************** int number = 1001; String numberStr = "学号:"; String info = numberStr + number;// +:连接运算 boolean b1 = true; String info1 = info + b1;// +:连接运算 System.out.println(info1);//学号:1001true } }
其二、截图为:
2、案例2:
其一、代码为:
class StringTest {public static void main(String[] args) {//*********************** //练习2(即: + 是加号还是连接符的情况区分): char c = 'a';//97 A:65 int num = 10; String str = "hello"; System.out.println(c + num + str);//107hello System.out.println(c + str + num);//ahello10 System.out.println(c + (num + str));//a10hello System.out.println((c + num) + str);//107hello System.out.println(str + num + c);//hello10a } }
其二、截图为:
3、案例3:
其一、代码为:
class StringTest {public static void main(String[] args) {//练习3(即:希望在控制台输出如下* *结果): //* * System.out.println("* *");//* * System.out.println('*' + '\t' + '*');//93,因为 char 对应的是 SCII 码,做的是加法运算; System.out.println('*' + "\t" + '*');//* * System.out.println('*' + '\t' + "*");//51* System.out.println('*' + ('\t' + "*"));//* * } }
其二、截图为:
4、案例4:
其一、代码为:
class StringTest {public static void main(String[] args) {//*********************** // 如下是两道 pdf 文档例题的讲解: //String str1 = 123;//编译不通过,因此不能说 String 是自动类型提升的最后一档; String str1 = 123 + ""; System.out.println(str1);//123 (但实际是 "123" 这样的字符串类型) //int num1 = str1;//编译不通过,不能将 String 类型直接转成 int 类型; //int num1 = (int)str1;编译不通过,不能将 String 类型以此强制类型转换成 int 类型; int num1 = Integer.parseInt(str1);// 此时的 Integer.parseInt(str1) 是包装类; System.out.println(num1);//123, 此时的输出结果是 int 类型的 123 的值; } }
其二、截图为:
5、案例5:
其一、代码为:
class StringTest {public static void main(String[] args) {//****************************************************** //String str111 = 4; //判断对错:no,编译报错; String str222 = 3.5f + ""; //判断str2对错:yes System.out.println(str222); //输出:3.5(表示的是字符串,实际是:"3.5") System.out.println(3+4+"Hello!"); //输出:7Hello! System.out.println("Hello!"+3+4); //输出:Hello!34 System.out.println('a'+1+"Hello!"); //输出:98Hello! System.out.println("Hello"+'a'+1); //输出:Helloa1 } }
其二、截图为:
6、案例6:
其一、代码为:
class StringTest {public static void main(String[] args) {//****************************************************** //判断是否能通过编译 //short s = 5; //s = s-2; //判断:no, 因为 2 是常量,是 int 类型,因此返回值是 int 类型; int s = 5; s = s-2; //此时的编译才没有问题; byte b = 3; //b = b + 4; //判断:no, 同上,因为 4 是常量,是 int 类型,因此返回值是 int 类型; b = (byte)(b+4); //判断:yes,因为强制类型转换没有问题; char c1 = 'a'; int i = 5; float d = .314F; double result = c1+i+d; //判断:yes byte b2 = 5; short s4 = 3; //short t = s4 + b2; //判断:no, 同上, 因为 byte 与 short 的运算结果是 int 类型; int t = s4 + b2;//此时的编译才没有问题; } }
其二、截图为:
Ⅴ、小结:
其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!
其二、若有转发或引用本文章内容,请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!