java的几个变量和类型

本文介绍了Java中的各种变量类型,包括整形、长整形、浮点型、字符型、字节型、布尔型和字符串类型,详细阐述了它们的内存占用、数据范围以及赋值规则。还讨论了类型转换,特别是不同数字类型之间的隐式转换和强制转换,以及数值提升的概念,例如在运算过程中小范围类型提升到大范围类型的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于java变量和运算符
1.1整形变量

int 变量名=初始值;

注意事项:

  1. int便是变量的类型是一个整形
  2. 变量名是变量的标识,后续都是用这个名字来使用变量
  3. 初始化操作时可选,这里建议创建变量的时候进行初始化
  4. 在java中,一个int变量占4个字节,和操作系统没有直接关系

什么是字节
字节是计算机中表示空间大小的基本单位
计算机使用二进制存储数据,8个二进制位为一个字节
我们平时的计算机内存为8GB内存,就是8G个字节
其中1KB=1024Byte,1MB=1024KB
8GB相当于80多亿个字节
4个字节所表示的数据范围大概是-21亿~21亿(2^32)/2

使用以下代码查看java中的整形数据范围:

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

java是没有无符号类型的
看这样一组代码

public class Num {

    public static void main(String[] args) {
        int num=Integer.MAX_VALUE;
        int num2=Integer.MIN_VALUE;
        System.out.println(num+"and"+num2);
        for(int i=31;i>=0;i--){
            System.out.printf("%d",num>>i&1);
        }
        System.out.println("\t");
        for(int i=31;i>=0;i--){
            System.out.printf("%d",num2>>i&1);
        }
    }
}

结果如下:
在这里插入图片描述

public class Num {

    public static void main(String[] args) {
        int num=Integer.MAX_VALUE+1;
        int num2=Integer.MIN_VALUE-1;
        System.out.println(num+"and"+num2);
        for(int i=31;i>=0;i--){
            System.out.printf("%d",num>>i&1);
        }
        System.out.println("\t");
        for(int i=31;i>=0;i--){
            System.out.printf("%d",num2>>i&1);
        }
    }
}

在这里插入图片描述
1.2长整形变量

long num=10L;//定义一个长整形变量,初始值写作10L

注意事项

  1. 初始化设定的值可以为10L,也可以是10l
  2. java中long类型占8个字节,即64比特位
  3. 表示的数据范围-2^63 -> 2^63-1

1.3双精度浮点型变量
代码示例

double num=1.0;
system.out.println(num);
public class Numtype {

    public static void main(String[] args) {
        int num=1.1;
        System.out.println(num*num);
    }
}

在这里插入图片描述
Java 中的 double 虽然也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范
围.
Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势
必会存在一定的精度误差.
1.5字符类型变量
代码示例

char ch='A';

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

1.6字节类型变量
代码示例:

byte value=0;
system.out.println(value);

一个字节类型表示的也是整数,只占一个字节, 范围(-128~127) -2^7~ 2^7-1

1.8布尔类型变量

boolean value = true; 
System.out.println(value);
  1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
  2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
  3. boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定.

1.9 字符串类型变量(重点)
代码示例

String name = "zhangsan"; 
System.out.println(name);

和上面的类型不同, String 不是基本类型, 而是引用类型(后面重点解释).
字符串中的一些特定的不太方便直接表示的字符需要进行转义.
转义字符示例

// 创建一个字符串 My name is "张三" 
String name = "My name is \"张三\"";

关于字符串拼接

public class Numtype {

    public static void main(String[] args) {
        String a="sing dance ";
        String b="dance basketball ";
        int c=666;
        String result=a+b+c;
        System.out.println(result);
    }
}

在这里插入图片描述

关于类型转换

java作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有严格的校验
有如下几个代码场景:
int 和long/double相互赋值

public class Typeconvert {

    public static void main(String[] args) {
        int a=10;
        double b=20.0;
        a=b;
    }
}

这个时候进行编译,会出现编译报错
在这里插入图片描述
double的范围比int还要长,如果将double赋值给int,就有可能发生精度缺失,报错
那int赋值给double呢

public class Typeconvert {

    public static void main(String[] args) {
        int a=10;
        double b=20.0;
        b=a;
    }
}

这个时候编译是会通过的
结论:不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型,反之则不行

int和boolean相互赋值

public class Typeconvert {

    public static void main(String[] args) {
        int a=10;
        boolean b=false;
        a=b;
        b=a;
    }
}

在这里插入图片描述
结论:int和boolean是毫不相干的两种类型,不能相互赋值

public class Typeconvert {

    public static void main(String[] args) {
        int a=10;
        double b=20.0;
        // a=b; 这样会却缺失精度,编译报错
        a=(int)b;

    }
}

编译之后我们发现程序可以正确编译并且执行

public class Typeconvert {

    public static void main(String[] args) {
        int a=10;
        double b=20.0;
        boolean c=false;
        c=(boolean)a;
    }
}

在这里插入图片描述
结论:使用(类型)的方式可以将double强转成int,但是,强制转换可能会导致精度丢失
强转类型不是一定能成功,互不相干的类型之间无法强转。

**

数值提升

**
int和long混合运算

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

当int和long混合运算的时候,int会提升成long,得到的结果依旧是long类型,此时再赋值给int类型,就会编译出错(long转成int)缺失精度

byte和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,再进行计算,也就是(a+b)是一个int类型,赋值给byte类型,就会痴线精度确实,出现报错
类型提升小结:

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值