《JavaSE第二章》之基本数据类型与类型转换

《JavaSE第二章》之基本数据类型与类型转换,第1张

前言

本篇文章带大家认识java的基本数据类型与运算符以及java中的输出和输出语句

博客主页:KC老衲爱尼姑的博客主页

博主的github,平常所写代码皆在于此

共勉:talk is cheap, show me the code

作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


文章目录
  • 🏆1.java程序的输出
    • 🎲 1.1打印不换行
    • 🎲​1.3格式化输出(printf)
  • 🏆 2.java中的输入语句
    • 🎲​2.1输入三板斧
  • 🏆3.java八大基本数据类型
    • 🎲3.1整型
    • 🎲 3.2短整型
    • 🎲3.3长整型
    • 🎲3.4字节型
    • 🎲 3.5浮点型
    • 🎲3.6布尔型
    • 🏆3.7字符型
  • 🏆3.8引用数据类型字符串型
    • 🏆​4.变量
      • 🏆4.2变量的作用域
      • 🎲4.3变量的命名规则
    • 🏆5.常量
      • 🎲字面值常量
      • final 关键字修饰的常量(指数值不能被改变)
    • 🏆6.类型转换
      • 🏆6.1int 和 long/double 相互赋值
      • 🎲​6.2int 和 boolean 相互赋值
      • 🎲 6.3int字面值常量 给 byte 赋值
      • 🏆6.4类型转换小结
    • 🏆​ 7.理解数值提升
        • 🎲7.2byte 和 byte 的运算
        • 🎲7.3类型提升小结:

🏆1.java程序的输出

java语言有三种输出方式,第一种是打印不换行,第二种是打印并换行,第三种是格式化输出。

🎲 1.1打印不换行
public class Text {
    public static void main(String[] args) {
        System.out.print("Hello World");
        System.out.print("我是hmr");
    }
}

🎲1.2打印换行

打印换行只需在print后加ln即可

public class Text {
    public static void main(String[] args) {
        System.out.println("Hello World");
        System.out.println("我是hmr");
    }
}

运行结果

🎲​1.3格式化输出(printf)

如果还是对C语言恋恋不忘的话,可以使用格式化输出来聊表对C的想念。java中的格式化输出的格式几乎与C语言中的一致。

public class Text {
    public static void main(String[] args) {
        int a=520;
        float b=1314.0F;
        System.out.printf("%d %.1f",a,b);
    }
}

运行结果

🏆 2.java中的输入语句

java中的输入语句相较于C语言的scanf来说使用的过程是繁琐的,但是没有scanf那么坑,之前我使用scanf多打了一个空格结果啥都出不来。悲伤已过去,接下来就来分享java输入语句的三板斧。

🎲​2.1输入三板斧

(1)第一步在类的前面导包

import java.util.Scanner;

这一步我们不需要手动导包,我们只需将鼠标放到Scanner上按住Alt+Enter就会自动导入,在idea中Alt是万能提示键。

(2)第二步:在获取输入数据之前,定义一个Scanner类的对象

Scanner sc= new Scanner(System.in);//sc就是Scanner的一个对象

(3)获取输入的数据

常用获取输入数据的方法,须通过Scanner的对象去调用

具体如下

  • sc.next()------->获取输入的一串字符(字符串)
  • sc.nextInt()——>获取输入的整数
  • sc.nextFloat()—->获取输入的float小数
  • sc.nextDouble()—>获取输入的double小数
  • sc.next().charAt(0)—->获取输入的单个字符

注意:java中并没有提供单独获取字符的方法,sc.next().char(0)是先在键盘允许录入字符串也就是使用next()方法,然后使用charAt(index)方法可以获取字符串中任意一个字符,因为字符串是有长度的,我们可以指定index来获取一个字符串中第几个字符

比如获取字符串中的第一个字符

package com.bit.task1;

import java.util.Scanner;//导包,不用手动导,可先创建对象后导包

public class Text {
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);//创建Scanner对象,sc就是Scanner的对象
        System.out.println("请输入一个字符串:");
        char ch=sc.next().charAt(0);//通过对像调用方法
        System.out.println(ch);
    }
}

运行结果

🏆3.java八大基本数据类型

java是强类型语言,意味着每一种变量在申明时就必须指定一种类型。在java中一共有8中基本数据类型,其中4中整型,2中浮点型,1中用于表示真假的boolean,还有一种用于表示Unicode编码的字符单元的字符类型char.

注意

  1. java中的基本数据类型的大小都是固定不变,不会因平台的改变而改变

  2. java中没有任何无符号形式的int,long,short,byte等。

🎲3.1整型
类型字节大小储存范围
int4-2147483648 ~ 2147483647

int最值求法

public class Text {
    public static void main(String[] args) {
       int num=10;
        System.out.println(num);
        System.out.println(Integer.MAX_VALUE);//利用包装类求最int的最大值
        System.out.println(Integer.MIN_VALUE);//利用包装类求最int的最小值
    }
}

java中为了万物皆对象,就把基本数据类型进行封装,就导致了每种数据类型都有其对应的包装类。其中Integer为int的包装类,可以看做是int的plus版,通过Integer的MAX_VALUE以及MIN_VALUE便可求出int的最值

🎲 3.2短整型
类型字节大小存储范围
short2-32768 ~ 32767

short最值求法

public class Text {
    public static void main(String[] args) {
       short num=10;
        System.out.println(num);
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
    }
}
🎲3.3长整型
类型字节大小存储范围
long8-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807

long最值求法

public class Text {
    public static void main(String[] args) {
       short num=10;
        System.out.println(num);
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }
}
🎲3.4字节型
类型字节大小范围
byte1-128~127

byte最值求法

public class Text {
    public static void main(String[] args) {
       byte num=10;
        System.out.println(num);
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);
    }
}

注意一下代码

   byte a=90;
   byte b=12+a;//a默认为int型 12+a 得到的是int型的数值无法存入byte
🎲 3.5浮点型
类型字节大小存储范围
float4大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位)
double8大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位)

float类型的数值后需带有F或者f否则就会被当做double的数值,也可以在浮点数后加后缀D或者d,如3.14D。所有的浮点型数值都遵循IEEE 754规范,具体说来,下面用于表示溢出和出错的情况

  • 正无穷大
  • 负无穷大
  • NaN(非数值)

如,一个正整数除以0的结果为正无穷大。计算0/0负数的平方根结果为NaN

单精度浮点型最值求法

public class Text {
    public static void main(String[] args) {
      float num=10f;
        System.out.println(num);
        System.out.println(Float.MAX_VALUE);
        System.out.println(Float.MIN_VALUE);
    }
}

双精度浮点型最值求法

public class Text {
    public static void main(String[] args) {
      double num=10.89;
        System.out.println(num);
        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);
    }
}
🎲3.6布尔型

boolean的取值只有两种true or false,用于逻辑判断,整型值与浮点型数值和布尔型的值是无法转换的。

代码示范

public class Text {
    public static void main(String[] args) {
     boolean flag = true;
     if(flag){//flag为真
         System.out.println("你好");//输出你好
     }else{
         System.out.println("你不好");
     }
    }
}
🏆3.7字符型
类型字节大小存储范围
char20~65535

注意

  1. char数据类型是16位无符号Java基元数据类型。
  2. java中的字符集采用Unicode(支持中文)
  3. 字面值为单引号加字母或者汉字
public class Text {
    public static void main(String[] args) {
        char ch='界';
        System.out.println(ch);
    }
}
🏆3.8引用数据类型字符串型

⚫ java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后 *** 作该字符串。

⚫ Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。

特点

⚫ String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。

常用API

方法说明
public int length()返回此字符串的长度
public char charAt(int index)获取某个索引位置处的字符
public char[] toCharArray():将当前字符串转换成字符数组返回
public String substring(int beginIndex, int endIndex)根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int beginIndex)从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence target, CharSequence replacement)使用新值,将字符串中的旧值替换,得到新的字符串
public String[] split(String regex)根据传入的规则切割字符串,得到字符串数组返回
🏆​4.变量

###🎲 4.1什么是变量?

变量可以看做一个存储物品的箱子,箱子的大小取决于变量的类型。

🏆4.2变量的作用域

也就是该变量能生效的范围, 一般是变量定义所在的代码块 (大括号)

变量的错误使用

class Test { 
 	public static void main(String[] args) { 
 	{ 
 	int x = 10; 
 	System.out.println(x); // 编译通过; 
 	} 
 	System.out.println(x); // 编译失败, 找不到变量 x. 
 	} 
}

切记:变量出大括号就不法使用。

🎲4.3变量的命名规则

硬性指标:

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

注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做.

软性指标:

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

小驼峰命名示例:

int maxValue = 100; 
String studentName = "张三";
🏆5.常量

定义:常量指的是运行时类型不能发生改变

🎲字面值常量
10 // int 字面值常量(十进制) 
010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8 
0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16 
10L // long 字面值常量. 也可以写作 10l (小写的L) 
1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D 
1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2 
1.0f // float 字面值常量, 也可以写作 1.0F 
true // boolen 字面值常量, 同样的还有 false 
'a' // char 字面值常量, 单引号中只能有一个字符
"abc" // String 字面值常量, 双引号中可以有多个字符. 
  1. final 关键字修饰的常量(指数值不能被改变)
final int a = 10;  a = 20; // 编译出错. 提示 无法为最终变量a分配值
🏆6.类型转换

类型转换分为两种一种是强制类型转换,另一种是隐式转换。强制类型转换如同将大瓶子中的水倒入到小瓶子里最终瓶子虽然也装满水了,但是会造成溢出部分水(数据的缺失);隐式转换如同小瓶子中的水倒入到大瓶子里。

先看以下几个代码场景:

🏆6.1int 和 long/double 相互赋值
int a = 10; 
long b = 20; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; // 编译通过. 
int a = 10; 
double b = 1.0; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; 

java是强类型语言,会对变量的字面值进行检查,如果字面值大于某一类型存储的最大值的话是无法编译的体现在idea中就是有一条红色的波浪线。当long类型的数值赋值给int类型的变量时是无法编译通过的,因为大类型的数值赋值给小类型的变量,而小类型的变量由于存储不下会造成数据的缺失,java是不允许这种情况的存在,而小类型的数值是可以赋值给大类型的变量,因为大类型的边量容量够大完全可以存储。

结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.

🎲​6.2int 和 boolean 相互赋值
int a = 10; 
boolean b = true; 
b = a; // 编译出错, 提示不兼容的类型
a = b; 

结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值.

🎲 6.3int字面值常量 给 byte 赋值
byte a = 100; // 编译通过 
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失

注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内.

结论: 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理.

使用强制类型转换

int a = 0; 
double b = 10.5; 
a = (int)b; 
int a = 10; 
boolean b = false; 
b = (boolean)a; // 编译出错, 提示不兼容的类型. 

结论: 使用 (类型) 的方式可以将 double 类型强制转成 int.

  1. 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
  2. 强制类型转换不是一定能成功, 互不相干的类型之间无法强转.
🏆6.4类型转换小结
  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.

类型转换的路径图

注意:int和float虽然都是占用4个字节的内存空间,但是float能表示数据的宽度比int大,因为它既能表示整数,也能表示小数部分,所以int可以向float转换。

🏆​ 7.理解数值提升

7.1int 和 long 混合运算

int a = 10; 
long b = 20; 
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; 

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来 接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

🎲7.2byte 和 byte 的运算
byte a = 10; 
byte b = 20; 
byte c = a + b; 
System.out.println(c); 
// 编译报错
Test.java:5: 错误: 不兼容的类型:int转换到byte可能会有损失
 byte c = a + b; 

结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都 提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误. 由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算.

正确的写法:

byte a = 10; 
byte b = 20; 
byte c = (byte)(a + b); 
System.out.println(c); 
🎲7.3类型提升小结:
  1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
  2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

最后的话

各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/719707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存