文章目录

  • 数据类型
    • 1.整型变量
      • 什么是字节?
    • 2.长整型变量
    • 3.双精度浮点型变量
    • 4.单精度浮点型变量
    • 5. 字符类型变量
    • 6.字节类型变量
    • 7.短整型变量
    • 8.布尔类型变量
  • 引用类型
    • 字符串类型变量(重点)
  • 变量
    • 变量的作用域
    • 变量的命名规则
    • 常量
      • 1.字面值常量
      • 2. final 关键字修饰的常量
    • 理解类型转换
    • 理解数值提升

数据类型

  • 变量指的是程序运行时可变的量. 相当于开辟一块内存空间来保存一些数据.
  • 类型则是对变量的种类进行了划分, 不同的类型的变量具有不同的特性.
  • 我们所讨论的 “变量” 主要和我们的 “内存” 这样的硬件设备密切相关.

冯诺依曼:现代计算机之父(大佬中的大佬)

详情点击:冯诺依曼结构计算机

输入设备:如:键盘、话筒
输出设备:如:显示屏、音响
CPU:由运算器和控制器组成
外存储器:如:优盘、硬盘、光盘(碟)
内存储器:程序(你打开的所有软件的运行程序)都在内存储器上跑,

为什么要讲这块儿呢?
是为了明白我们定义的变量要占内存,而占的内存就是内存储器上的内存,也就是说程序跑到哪里就会占用哪里的内存。

1.整型变量

基本语法格式

int 变量名 = 初始值;

代码示例:

int a = 10; // 定义一个整型变量
System.out.println(a) ;

思考3个问题:
①a占用几个字节?
②a的取值范围是多少?
③有没有无符号整型?
答:
①:a占用4个字节,在java中int就占4个字节,和多少位平台没有关系(32位/64位都占4个字节),因此可以说它的可移植性强
②: -2 31~ 231-1(-2147483648~2147483647)
③:在java当中没有无符号这样的概念,都是有符号的,如没有无符号的整数,“统统”都是有符号的。

注意事项:

  1. int 表示变量的类型是一个整型
  2. 变量名是变量的标识,也叫标识符. 后续都是通过这个名字来使用变量
  3. 建议创建变量的时候都要初始化.
  4. 在 Java 中, 一个 int 变量只占 4 个字节. 和操作系统没有直接关系.
  5. 在java当中,标识符由数字,字母,下划线,$ 这四种组成,但标识符能以数字开头,当然,也尽量不要以下划线、$开头和结尾,虽然合法但不太合理。

什么是字节?

字节是计算机中表示空间大小的基本单位.
计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).
我们平时的计算机为 8GB 内存, 意思是 8G 个字节.
其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.
所以 8GB 相当于 80 多亿个字节.
4 个字节表示的数据范围是 -2^31 -> 2^31-1 , 也就大概是 -21亿 到 +21亿

通过代码查看 Java 中的整型数据范围:

代码1:

public class testDemo1 {public static void main1(String[] args) {int a=10;//定义一个整型变量并初始化System.out.println(a);//打印int的最大最小值:System.out.println(Integer.MAX_VALUE);//Integer是int的包装类System.out.println(Integer.MIN_VALUE);}
}

打印结果:

通过画图查看 Java 中的整型数据范围:在计算机的世界中,假设将整型的取值范围看成是一个圆

代码2:但如果运算的结果超出了 int 的最大范围, 就会出现溢出的情况

 public static void main(String[] args) {int maxValue=Integer.MAX_VALUE;System.out.println(maxValue+1);//最大值+1int minValue=Integer.MIN_VALUE;System.out.println(minValue-1);//最小值-1}

运行结果:

21亿这样的数字对于当前的大数据时代来说, 是很容易超出的. 针对这种情况, 我们就需要使用更大范围的数据类型来表示了,java中提供了long类型。

2.长整型变量

语法格式

long 变量名=初始值;

代码示例:

 public static void main(String[] args) {long l=10L;//定义一个长整型变量并初始化System.out.println(l);// 查看 Java 中的长整型数据范围:System.out.println(Long.MAX_VALUE);//注意是Long,而不是long,Long是long的包装类System.out.println(Long.MIN_VALUE);}

打印结果:

从打印结果来看,这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用。

注意事项:

  1. 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long
  2. 初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以.
  3. 使用 10 初始化也可以, 10 的类型是 int, 10L 的类型是 long, 使用 10 L 或者 10 l 更好一些.
  4. 4.Java 中 long 类型占 8 个字节. 表示的数据范围 -2^63 ~2^63-1。

3.双精度浮点型变量

语法格式

double 变量名=初始值;

代码示例:

 public static void main(String[] args) {double d1=1.11;//定义一个double类型的变量并初始化System.out.println(d1);// 查看 Java 中的double数据范围:System.out.println(Double.MAX_VALUE);//Double是double的包装类System.out.println(Double.MIN_VALUE);double d2=1.1;System.out.println(d2*d2);}

打印结果:

Java 中的 double 虽然也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围。

注意:以后写代码表示小数的时候,尽量用double,可以更加精确,因为小数是没有精确的值的,如上面代码中d2的打印结果。

4.单精度浮点型变量

基本格式:

float 变量名 = 初始值;

代码示例:

public static void main(String[] args) {float f1=11.1f;//11.1后面需要加f或F,因为java是强类型语言,一旦等号两边的类型不匹配就会报错soutsoutSystem.out.println(f1);// 查看 Java 中的float数据范围:System.out.println(Float.MAX_VALUE);//Float是Float的包装类System.out.println(Float.MIN_VALUE);}

运行结果:

float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑double,不推荐float。

5. 字符类型变量

基本格式:

char 变量名 = 初始值;

代码示例:

public static void main(String[] args) {char ch1='a';System.out.println(ch1);char ch2=97;System.out.println(ch2);char ch3='嗨';//char在java中是两个字节,可以引一个汉字System.out.println(ch3);// 查看 Java 中的char的取值范围:System.out.println(Character.MAX_VALUE);//Character是char的包装类System.out.println(Character.MIN_VALUE);}

打印结果:

注意:char类型的取值是从0开始的不能存负数,它的取值范围是0~65535(2个字节,16位)。

如:

关于字符编码方式的讨论, 参见https://zhuanlan.zhihu.com/p/35172335

6.字节类型变量

基本语法格式:

byte 变量名 = 初始值;

代码示例:

public static void main(String[] args) {byte a=10;byte b=20;System.out.println(a);System.out.println(b);// 查看 Java 中的byte的取值范围:System.out.println(Byte.MAX_VALUE);//Byte是byte的包装类System.out.println(Byte.MIN_VALUE);}

打印结果:

注意:

1.java当中的byte其实很类似于C语言中的char,它有一个字节,取值范围-128~127。

2.局部变量在使用的时候必须初始化,否则编译不能通过;

3.给任何的数据类型赋值的时候字面值是一定不能超过这种类型的取值范围的。

如:

7.短整型变量

基本语法格式:

short 变量名 = 初始值;

代码示例:

public static void main(String[] args) {short s=1;System.out.println(s);// 查看 Java 中的short的取值范围:System.out.println(Short.MAX_VALUE);//Short是short的包装类System.out.println(Short.MIN_VALUE);}

打印结果:

注意:

  1. short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767
  2. 这个表示范围比较小, 一般不推荐使用.

8.布尔类型变量

基本语法格式:

boolean 变量名 = 初始值;

代码示例:

public static void main(String[] args) {boolean flg1=true;System.out.println(flg1);boolean flg2=false;System.out.println(flg2);}

打印结果:

注意事项:

1.boolean 类型的变量只有两种取值, true 表示真, false 表示假.
2. 在java当中,不存在 1 表示 true, 0 表示 false 这样的用法.
3. boolean 类型JVM 的实现有些 书上写是占 1 个字节, 有些占1个比特位,这个没有明确规定。

总结:Java中的八种数据类型

简单类型/内置类型 包装类 大小(单位字节) 取值范围
int Integer 4 -231~231-1
long Long 8 -263~263-1
double Double 8 参考C语言浮点数的存储
float Float 4 参考C语言浮点数的存储
char Character 2 0~65535
byte Byte 1 -128~127
shotr Short 2 -215~215-1
boolean Boolean JVM标准并未说明 true/false

引用类型

字符串类型变量(重点)

基本语法格式:

String 变量名 = “初始值”;

代码示例:

  public static void main(String[] args) {String str="wasia wasai";//String是引用数据类型,str 是一个引用变量System.out.println(str);//1.字符串和任意类型的数据使用加号拼接后其结果也是字符串//java中的字符串拼接格式int a=10;System.out.println("a="+a);int b=30;System.out.println("hello "+a+b);//2.如果字符串放在后面就会先执行+操作再做字符串连接System.out.println(a+b+"hehe");//3.字符串中的一些特定的不太方便直接表示的字符需要进行转义String c="hello \"哇塞哇塞\"";// 创建一个字符串 hello ”哇塞哇塞“System.out.println(c);}

打印结果:

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

public static void main(String[] args) {String str1="luanshizhongde";String str2="meishen";String str3=str1+str2;System.out.println(str3);}

字符串和整数进行拼接:

 public static void main(String[] args) {String str="result=";int a=999;int b=1;String value=str+a+b;System.out.println(value);}

打印结果:

以上代码说明, 当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为.

因此我们可以很方便的使用 System.out.println 同时打印多个字符串或数字

如:

 public static void main(String[] args) {int a=520;int b=1314;System.out.println("a="+a+",b="+b);}

注意:转义字符有很多, 其中几个比较常见的如下:

转义字符 解释
\n 换行
\t 水平制表符
\ ’ 单引号
\ " 双引号
\ \ 反斜杠

变量

变量的作用域

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

【局部变量作用域】代码示例:

【变量重定义】代码示例:

如何解决重定义?

运行结果:int i=999;表示对i初始化,i=9;表示将i改为了9


注意:

1.什么是局部变量?

答:定义在函数体内的变量,

2.局部变量的作用域在它所在的这个函数的函数体内

3.如何判断局部变量是否在函数体内?

答:找花括号,即包含这个变量的花括号的开始和结束位置。

4.局部变量在使用的时候必须初始化。

变量的命名规则

硬性指标:

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

软性指标:
1.变量命名要具有描述性, 见名知意.
2.变量名不宜使用拼音(但是不绝对).
3.变量名的词性推荐使用名词.
4.虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做
5.变量的命名,建议采用小驼峰命名法。

疑问:

什么是大驼峰?

当一个变量名由多个单词构成的时候, 每个单词的首字母都大写

什么是小驼峰?

当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词的首字母都大写

代码示例:

 public static void main(String[] args) {//小驼峰命名示例int maxNum=11;String studengAge="20";System.out.println(maxNum);System.out.println(studengAge);//大驼峰命名示例int MaxNum=12;System.out.println(MaxNum);}

打印结果:

什么时候使用小驼峰,什么时候使用大驼峰?

小驼峰 大驼峰
变量的命名 类名
方法的名称 接口
抽象类

常量

上面讨论的都是各种规则的变量, 每种类型的变量也对应着一种相同类型的常量.

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

常量主要有以下两种体现形式:

1.字面值常量

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 字面值常量, 双引号中可以有多个字符.

2. final 关键字修饰的常量

C语言中修饰常量的关键字为const,而Java中修饰常量的关键字为final.

代码示例:

建议:由final修饰的变量建议大写,易于区分。

如:

public static void main(String[] args) {final int NUM;NUM=20;System.out.println(NUM);}

提示:final 不仅可以修饰变量,还可以修饰函数,修饰类,修饰函数把它叫做密封方法,修饰类把它叫做密封类。

理解类型转换

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

代码示例:int long/double/float 相互赋值

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

如何解决呢?需要强制类型转换。

代码示例:int boolean 相互赋值

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

类型的转换要注意:

  • 注意等号两边的数据类型的字节大小,以及表示的数字的宽度(如float可以表示整数也可表示小数,而int只能表示整数)。
  • boolean类型不能和任何其他的数据类型之间进行转换。
  • .强制类型转换可能会导致精度丢失,小数点后面的部分会被忽略。
  • .强制类型转换不是一定能成功, 互不相干的类型之间无法强转.

代码示例:int字面值常量 给 byte 赋值

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

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

类型转换总结

  • 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
  • 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
  • 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.

理解数值提升

疑问:为什么e变量可以编译通过呢?

答:因为a,b是变量,变量只有程序运行的时候才能知道a,b里面放的是几;而e=10+20java在编译的时候就已经算出为30了,相当于是一个常量,即byte e=10+20;相当于byte e=30;

结论:

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

int long 混合运算

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

类型提升小结:

  • 不同类型的数据混合运算, 范围小的会提升成范围大的.
  • 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

int String 之间的相互转换

代码示例:

public static void main(String[] args) {int a=55;String str1=a+"";System.out.println(str1);//55 , 但这里的55是一个字符串 String str2=String.valueOf(a);//String.valueOf(a)的作用是把a变成一个字符串System.out.println(str2);//55, 这里的55是一个字符串String str="999";int num = Integer.parseInt(str);//Integer.parseInt(str)的作用是把字符串str变成一个整数,也可使用      Integer.valueOfSystem.out.println(num);//999, 但这里的999是一个整数}

了解valueOf的使用可查询

java的八种数据类型和一种引用类型及变量【详解篇2】相关推荐

  1. Java中的String数据类型,String类(字符串)详解

    目录 第一章.String概述 1)String是什么 2)String长什么样 3)String的构造方法(声明方式) 第二章.String类的详解 1)String底层是什么 2)字符串存储的内存 ...

  2. yum 查看java版本_如何查找YUM安装的JAVA_HOME环境变量详解

    前言 开发中很多需要javac 的程序依赖 JAVA_HOME环境变量. 如果是手工下载源码安装的JDK,很容易知道JAVA_HOME的目录. 例如 那么对应的 JAVA_HOME 为 /usr/lo ...

  3. Java 中的基本数据类型有几种,如何表示,取值范围以及注意事项? 数据类型的种类

    1. Java 中的基本数据类型有几种,如何表示,取值范围以及注意事项? 数据类型的种类 一个字节是8字符 public class test_609 { public static void mai ...

  4. Go中的函数也是一种数据类型,可以赋值给一个变量

    在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了.通过该变量可以对函数调用. 这种概念类似于scala中的高阶函数 package main import &quo ...

  5. HTML导航栏的四种制作方法,jQuery+CSS3实现四种应用广泛的导航条制作实例详解

    导航条的使用很广,每个网站都会做出具有自己特色的导航条.最近特地去了解了各种类型的导航条,比如具有高亮显示的导航条,中英文互相切换的导航条,具有弹性动画的导航条,甚至是具有摩擦运动动画的导航条(文字下 ...

  6. 3种Javascript图片预加载的方法详解

    3种Javascript图片预加载的方法详解 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度. 这对图片画廊及图片占据很大比例 ...

  7. java中北大学ppt总结+课后习题第二章(小宇特详解)

    java中北大学ppt总结+课后习题第二章(小宇特详解) 基本数据类型 Java语言有8种基本数据类型. 逻辑类型:boolean.1字节 整数类型: 1字节整数类型:byte. 2字节整数类型:sh ...

  8. 【Java】Java方法详解篇

    [Java]java方法详解篇 文章目录 [Java]java方法详解篇 方法 void修饰的方法的调用 方法的重载 方法的形参是基本数据类型 方法的形参是引用类型 递归结构 方法 方法:完成特定功能 ...

  9. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  10. java一个方法排他调用_Java编程实现排他锁代码详解

    一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...

最新文章

  1. C语言中的位运算和逻辑运算
  2. C# 中实现单例模式
  3. 最重要的会计期间是_非会计专业考生如何备考注会?难度多大?
  4. 一家美资企业的java servlet面试题
  5. 求生之路2浩方联机开始显示服务器,求生之路2怎么联机_求生之路2浩方联机教程_快吧单机游戏...
  6. Oracle查询一个范围,oracle字段范围查询
  7. 2021-2025年中国一次性透析装置行业市场供需与战略研究报告
  8. c语言 fft程序,FFT算法的使用说明与C语言版实现源码
  9. gom引擎没有和账号服务器连接,GOM引擎提示脚本错误,找不到脚本
  10. mysql环境变量配置还是不行_mysql环境变量配置与Error 1045的解决方案
  11. Resolving multicopy duplications de novo using polyploid phasing 用多倍体相位法解决多拷贝复制的新问题...
  12. 望京有没有可能成为下一个硅谷?
  13. 获取IPhone相册中图片的方法(ASSets)
  14. 周志华西瓜书课后习题答案总目录
  15. svn合并时候的诡异事件
  16. java实现加权随机,负载均衡--加权随机算法(Weight Random)
  17. 实现1V1音视频实时互动直播系统 十二、第九节 直播客户端的实现
  18. HTTP错误 404.17 - Not Found IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
  19. 《剑指offer》—— 42. 和为S的两个数字(Java)
  20. Linux操纵系统饬令行下的文本编纂器VI引见

热门文章

  1. linux下system函数详解
  2. 四月书单--《你一年的8760小时》,《代码的整洁之道》
  3. 沧州铁钱库的反映出北宋时铁钱在北方使用
  4. Citavi 给参考文献添加编号
  5. STM32F407ZGT6使用SDIO方式驱动SD卡
  6. mysql smallint范围_mysql中的int smallint 取值范围
  7. 计算机二级python基本操作题(五)
  8. 计算线性SVM分类器的分类面方程
  9. 奥比中光相机Gemini pro使用
  10. WEIPHP 4 欢迎语BUG:如果是多图文,则所有文章都显示第一篇