初识java(二):数据类型与变量

目录

一:字⾯常量

二:数据类型

三:变量

1.变量概念

2.语法格式

3.整型变量

3.1整型变量

int区间范围:

3.2⻓整型变量

long区间范围

3.3短整型变量

short区间范围

3.4字节型变量

byte区间范围

3.5浮点型变量

3.5.1双精度浮点型

3.5.2单精度浮点型

3.6字符型变量

3.7布尔型变量

3.8字符串类型

4.类型转换

4.1⾃动类型转换(隐式)

4.2强制类型转换(显式)

5.类型提升

本文介绍了Java中的字面常量、数据类型和变量相关概念

主要内容包括:

1.字面常量的分类(字符串、整型、浮点型等);

2.基本数据类型的分类(四类八种)及其存储特性;

3.变量的定义和使用方法;

4.各种整型变量(int/long/short/byte)和浮点型变量的特点及取值范围;

5.类型转换规则(自动转换和强制转换)及类型提升机制。文章通过代码示例详细说明了不同数据类型的用法和注意事项,比较了Java与C语言在数据类型处理上的异同。

一:字⾯常量

在上次HelloWorld程序中, System.out.println("Hello World") ; 语句,不论程序何时 运⾏,输出的都是HelloWorld,其实"HelloWorld"就是字⾯常量

常量即程序运⾏期间,固定不变的量称为常量,⽐如:⼀个礼拜七天,⼀年12个⽉等

代码如下:

java 复制代码
public class Test{
public static void main(String[] args){
System.Out.println("hello world!");
System.Out.println(100);
System.Out.println(3.14);
System.Out.println('A');
System.Out.println(true);
System.Out.println(false);
}
}

运行结果:

其中:100、3.14、'A'、true/false都是常量,将其称为字⾯常量

字⾯常量的分类:

1. 字符串常量:由 " " 括起来的,⽐如"12345"、"hello"、"你好"。

2. 整型常量 :程序中直接写的数字(注意没有⼩数点),⽐如:100、1000

3. 浮点数常量:程序中直接写的⼩数,⽐如:3.14、0.49

4. 字符常量:由单引号括起来的当个字符,⽐如:'A'、'1'

5. 布尔常量:只有两种true和false

6. 空常量 :null(后⾯了讲) 注意:字符串、整型、浮点型、字符型以及布尔型,在Java中都称为数据类型

二:数据类型

在Java中数据类型主要分为两类:基本数据类型引⽤数据类型

基本数据类型有四类⼋种:

  1. 四类 :整型、浮点型、字符型以及布尔型

  2. ⼋种

注意(和C语言有区别):

• 不论是在16位系统还是32位系统,int都占⽤4个字节,long都占8个字节

• 整型和浮点型都是带有符号的

• 整型默认为int型,浮点型默认为double

• 字符串属于引⽤类型,该种类型后序介绍。

什么是字节?(在C语言的时候讲过了)

字节是计算机中表⽰空间⼤⼩的基本单位.

计算机使⽤⼆进制表⽰数据.我们认为8个⼆进制位(bit)为⼀个字节(Byte).

我们平时的计算机为8GB内存,意思是8G个字节.

其中1KB=1024Byte,1MB=1024KB,1GB=1024MB. 所以8GB相当于80多亿个字节.

三:变量

1.变量概念

在程序中,除了有始终不变的常量 外,有些内容可能会经常改变,⽐如:⼈的年龄、⾝⾼、成绩分 数、数学函数的计算结果等,对于这些经常改变的内容,在Java程序中,称为变量。⽽数据类型就是 ⽤来定义不同种类变量的

2.语法格式

定义变量的语法格式为:

数据类型 变量名 = 初始值 ;

代码如下:

整型变量、浮点型、字符型、布尔类型

注意一下:这里的布尔类型和C语言的布尔类型写法不一样

C语言:bool

java:boolean

java 复制代码
int a = 10;   
double d = 3.14;
char c = 'A';
boolean b = true;

System.out.println(a);
System.out.println(d);
System.out.println(c);
System.out.println(b);

输出结果:

此外这里的变量是可以赋值的,和C语言是一模一样的,如下:

java 复制代码
public static void main(String[] args) {
        int a=10;
        System.out.println(a);
        a=20;
        System.out.println(a);
    }

输出结果:

还有就是:在⼀⾏可以定义多个相同类型的变量。这里也和C语言是一样的,如下:

java 复制代码
 public static void main(String[] args) {
        int a1 = 10, a2 = 20, a3 = 30;
        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);
    }

输出结果:

3.整型变量

3.1整型变量

⽅式⼀:在定义时给出初始值(没有问题)

代码如下:

java 复制代码
 public static void main(String[] args) {
        int a = 10;
        System.out.println(a);
    }

输出结果:

⽅式⼆:在定义时没有给初始值,但使⽤前必须设置初值(没有问题)

代码如下:

java 复制代码
 public static void main(String[] args) {
        int b;
        b = 10;
        System.out.println(b);

    }

输出结果:

方式三:定义了变量但是没有赋值(有问题)

代码如下:

java 复制代码
public static void main(String[] args) {
        int c;
        System.out.println(c);
        c = 100;
    }

输出结果:会直接报错(这里和C语言的一个很大的区别)

int区间范围:

代码如下:

java 复制代码
 public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
    }

输出结果:

注意事项:

  1. int不论在何种系统下都是4个字节

  2. 推荐使⽤⽅式⼀定义,如果没有合适的初始值,可以设置为0

  3. 在给变量设置初始值时,值不能超过int的表⽰范围,否则会导致溢出

  4. 变量在使⽤之前必须要赋初值,否则编译报错

  5. int的包装类型为Integer

3.2⻓整型变量

表示代码(三种写法):

java 复制代码
  public static void main(String[] args) {
        long b = 10;   // long定义的⻓整型变量

        long c = 10L; // 建议后面加L,做个区分

        long d =10l;  // 加小l和上面一个意思,但是大写更好
       
    }

后面建议加大写的L 来加以区分,推荐这样写

long区间范围

代码如下:

java 复制代码
 public static void main(String[] args) {
        
        System.out.println(Long.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);
    }

输出结果:

注意事项:

  1. ⻓整型变量的初始值后加L或者l,推荐加L

  2. ⻓整型不论在那个系统下都占8个字节

  3. ⻓整型的表⽰范围为:-2^63 ~(2^63)-1

  4. long的包装类型为Long

3.3短整型变量

表示代码:

java 复制代码
 public static void main(String[] args) {
        short a = 10;
        System.out.println(a);
    }

输出结果:

short区间范围

代码如下:

java 复制代码
  public static void main(String[] args) {
        System.out.println(Short.MIN_VALUE);
        System.out.println(Short.MAX_VALUE);
    }

输出结果:

注意事项:

  1. short在任何系统下都占2个字节

  2. short的表⽰范围为:-32768~32767

  3. 使⽤时注意不要超过范围(⼀般使⽤⽐较少)

  4. short的包装类型为Short

3.4字节型变量

注意这是java特有的变量,C语言是没有的

表示代码如下:

java 复制代码
public static void main(String[] args) {
        byte b = 10;
        System.out.println(b);
    }

输出:

byte区间范围

代码如下:

java 复制代码
 public static void main(String[] args) {
        System.out.println(Byte.MIN_VALUE);
        System.out.println(Byte.MAX_VALUE);
    }

输出结果:

注意事项:

  1. byte在任何系统下都占1个字节

  2. byte的范围是:-128~127

  3. 字节的包装类型为Byte

思考:byte、short、int、long都可以定义整型变量,为什么要给出4种不同类型呢?

这就好⽐买⾐服时的尺码:

3.5浮点型变量

3.5.1双精度浮点型

代码写法:

java 复制代码
 public static void main(String[] args) {
        double d = 3.14;
        System.out.println(d);
    }

神奇的代码⼀:

java 复制代码
public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a / b);   //输出0.5吗?

    }

输出是0.5吗?显然不是。这里的计算和C语言大同小异,结果是0

结论:

在Java中,int除以int的值仍然是int(会直接舍弃⼩数部分)。如果想得到0.5,需要使⽤double类 型计算

代码如下:

java 复制代码
public static void main(String[] args) {
        double a = 1.0;
        double b = 2.0;
        System.out.println(a / b);   //输出0.5
    }

结果:

注意事项:

  1. double在任何系统下都占8个字节

  2. 浮点数与整数在内存中的存储⽅式不同,不能单纯使⽤的形式来计算

  3. double的包装类型为Double

  4. double类型的内存布局遵守IEEE754标准(和C语⾔⼀样),尝试使⽤有限的内存空间表⽰可能⽆限 的⼩数,势必会存在⼀定的精度误差,因此浮点数是个近似值,并不是精确值

3.5.2单精度浮点型

书写代码:

java 复制代码
public static void main(String[] args) {
        float num = 1.0f;
        System.out.println(num);
    }

结果:

float 类型在Java中占四个字节,

同样遵守IEEE754标准.由于表⽰的数据精度范围较⼩,⼀般在⼯程上 ⽤到浮点数都优先考虑double,不太推荐使⽤float.

float的包装类型为Float

3.6字符型变量

代码写法:

java 复制代码
 public static void main(String[] args) {
        char c1 = 'A';
        char c2 = '1';
        char c3 = '菜';
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
    }

输出结果:

注意事项:

  1. Java中使⽤ 单引号 + 单个字⺟ 的形式表⽰字符字⾯值.

  2. 计算机中的字符本质上是⼀个整数.在C语⾔中使⽤ASCII表⽰字符,⽽Java中使⽤Unicode表⽰ 字符.因此⼀个字符占⽤两个字节(C语言里面是一个字节),表⽰的字符种类更多,包括中⽂.

  3. char的包装类型为Character

3.7布尔型变量

布尔类型常⽤来表⽰真假,在现实⽣活中也是经常出现的,⽐如:听说xxx同学买彩票中了⼀个亿..., 听到后估计⼤部分⼈第⼀反应就是:真的假的?

代码写法:

java 复制代码
 public static void main(String[] args) {
        boolean b = true;
        System.out.println(b);
        b = false;
        System.out.println(b);
    }

输出结果:

注意事项:

  1. boolean类型的变量只有两种取值,true表⽰真,false表⽰假.

  2. Java的boolean类型和int不能相互转换,不存在1表⽰true,0表⽰false这样的⽤法.

不能转换的原因看一下代码:

java 复制代码
  public static void main(String[] args) {
        boolean value = true;
        System.out.println(value + 1);
    }

结果(会报错):

  1. Java虚拟机规范中,并没有明确规定boolean占⼏个字节,也没有专⻔⽤来处理boolean的字节码 指令,在Oracle的Java虚拟机实现中,Java编程语⾔中的布尔数组被编码为Java虚拟机字节数 组,每个布尔元素使⽤8位。

  2. boolean的包装类型为Boolean

参考官⽅⼿册:

Chapter2.TheStructureoftheJavaVirtual Machine

3.8字符串类型

它也是java特有的,在C语言里面是没有的

在Java中使⽤String类定义字符串类型,⽐如:

java 复制代码
        public static void main(String[] args) {
            String s1 = "hello";
            String s2 = " world";
            System.out.println(s1);
            System.out.println(s2);
            
            System.out.println(s1+s2);   // s1+s2表⽰:将s1和s2进⾏拼接
}

输出结果:

特点:

计算加法的时候会把前面的字符串和后面的字符串拼接在一起

4.类型转换

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

复制代码
int a = 10; 
long b = 100L; 
b = a; // 可以通过编译 
a = b; // 编译失败

在Java中,当参与运算**数据类型不⼀致时,就会进⾏类型转换。**Java中类型转换主要分为两类:⾃动 类型转换(隐式)和强制类型转换(显式)。

4.1⾃动类型转换(隐式)

⾃动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会⾃动进⾏处理。特点:数据范 围⼩的转为数据范围⼤的时会⾃动进⾏。(小转大)

复制代码
System.out.println(1024);   //整型默认情况下是int
System.out.println(3.14);   //浮点型默认情况下是double

int 类型的值 ⾃动转换为了 long 类型(小自动转为大范围)

int a = 100;

long b = 10L;

b = a;

float 类型的值 ⾃动转换为了 double 类型

float f = 3.14F;

double d = 5.12;

d = f;

4.2强制类型转换(显式)

强制类型转换:当进⾏操作时,代码需要经过⼀定的格式处理,不能⾃动完成。特点:数据范围⼤的 到数据范围⼩的。(大换小)

int-->long ,数据范围由⼩到⼤,隐式转换

long-->int, 数据范围由**⼤到⼩,需要强转**,否则编译失败**(这里的强转和C语言是一样的)**

int a = 10;

long b = 100L;

b = a;

a = (int)b; //强转

注意事项:

  1. 不同数字类型的变量之间赋值,表⽰范围更**⼩的类型能隐式转换成范围较⼤的类型**

  2. 如果需要把**范围⼤的类型赋值给范围⼩的,需要强制类型转换,**但是可能精度丢失

  3. 将⼀个字⾯值常量进⾏赋值的时候,Java会⾃动针对数字范围进⾏检查

  4. 强制类型转换不⼀定能成功,不相⼲的类型不能互相转换

5.类型提升

不同类型的数据之间相互运算时,数据类型⼩的会被提升到数据类型⼤的。(提升往高的提)

lava这里和C语言也是一样的

int与long之间:int会被提升为long

int a = 10;

long b = 20;

int c = a + b; // 编译出错 : a + b== > int + long--> long + long 赋值给 int 时会丢失 数据

long d = a + b; // 编译成功: a + b==>int + long--->long + long 赋值给 long

byte与byte的运算

java 复制代码
 public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        byte c = a + b; //编译出错
        System.out.println(c);
    }

结果:

结论:byte和byte都是相同类型,但是出现编译报错.

原因是:

虽然a和b都是byte,但是计算a+b会 先将a和b都提升成int,再进⾏计算,得到的结果也是int,这是赋给c,就会出现上述错误.

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

正确的写法(强转)

java 复制代码
 public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        byte c = (byte)(a + b);
        System.out.println(c);
    }

结果:

【类型提升⼩结:】

  1. 不同类型的数据混合运算,范围**⼩的会提升成范围⼤**的.

  2. 对于short,byte这种**⽐4个字节⼩的类型,会先提升成4个字节的int,再运算**

以上就是我们的全部内容了!!!!

相关推荐
小闫BI设源码1 小时前
当20个节点选出两个Master时:Elasticsearch的致命故障与解决方案
java·elasticsearch·jenkins·php·面试宝典·深入解析
SamDeepThinking1 小时前
千万级用户购物车系统的架构设计
java·后端·架构
liwulin05061 小时前
【JAVAFX】从ORACLE JDK切换到国内的JDK以便使用JAVAFX功能
java·数据库·oracle
xcjbqd01 小时前
提升Python编程效率的五大特性
开发语言·python
平凡但不平庸的码农1 小时前
Go GMP 调度模型详解
开发语言·后端·golang
2401_878454531 小时前
js的复习(一)
开发语言·javascript·ecmascript
旺仔老馒头.1 小时前
【C++】类和对象(二)
开发语言·c++·后端·类和对象
等故意1 小时前
C# 工业视觉上位机开发心得分享
开发语言·数码相机·c#·视觉检测
广师大-Wzx1 小时前
JavaWeb:后端部分
java·开发语言·spring·servlet·tomcat·maven·mybatis