:Java常量数据类型变量类型转换类型提升和字符串

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:Java常量数据类型变量类型转换类型提升和字符串相关的知识,希望对你有一定的参考价值。

文章目录

一:Java字面常量

字面常量:程序运行期间固定不变的量,主要有

  • 字符串常量:由“”括起来的;如"123""HelloWorld""生活"
  • 整型常量:也即整数;如1009999
  • 浮点数常量:也即小数;如3.140.985
  • 字符常量:由''括起来的单个字符;如'A''2'
  • 布尔常量:也即truefalse
  • 空常量:也即null

需要注意:字符串、整型、浮点型、字符型和布尔型在Java中称之为数据类型

二:Java数据类型

数据类型:数据类型是用来定义变量的,它规定了一个变量占用的空间大小,Java中的数据类型分为以下两类

  • 基本数据类型
  • 引用数据类型

(1)基本数据类型

基本数据类型见下表,需要注意

  • 每个基本数据类型都会对应一个类类型,也即包装类

  • 无论是16位还是32位系统,int都占用4个字节,long都占用8个字节

  • 整型和浮点型都是有符号的(意思就是肯定有正负)

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

  • 计算机使用 二进制(bit) 表示数据

  • 字节(Byte)是计算机中表示空间大小的基本单位,1B=8bit

数据类型关键字大小范围包装类
字节型byte1字节-128~127Byte
短整型short2字节-32768~32767Short
整型int4字节-231~ 231-1Integer
长整型long8字节-263~263-1Long
单精度浮点数float4字节Float
双精度浮点数double8字节Double
字符型char2字节0~65535character
布尔型boolean无明确规定true或falseBoolean

(2)引用数据类型

  • 例如数组、String、类等;具体内容后面会探讨

三:变量

变量及赋值:除常量外,生活中更多见的是变量(比如人的年龄就处在不断变化之中);可以把变量想象成一个箱子,这个箱子可以装特定的东西(例如苹果箱子规定只能装苹果),而箱子的大小则由数据类型决定,箱子的名字就叫做变量名,即数据类型 变量名=数值,在赋值时需要注意

  • 变量在使用前必须初始化,否则无法运行(Java对数据类型的检查非常严格)
  • 给变量赋的值不能超过该类型变量所规定的的范围,否则溢出
  • 在方法内部定义的变量叫做局部变量、外部定义的是成员变量

(1)整型变量

A:int

需要注意

  • 无论在何种系统下,int都是4个字节
  • int包装类型为integer
  • int范围为:-231~ 231-1
  • case1:建议使用这种方式
  • case3:通过integerMAX_VALUEMIN_VALUE可以得到整型的最大和最小值
  • case4:定义时未初始化或超出int范围,Java会直接报错
public class TestDemo 
    public static void main(String[] args) 
        //case1:在定义时给出初值
        int a = 10;
        System.out.println(a);
        System.out.println("---------------------------------------------");
        //case2:先定义后赋值
        int b;
        b = 20;
        System.out.println(b);
        System.out.println("---------------------------------------------");
        //case3:输出最大和最小值
        System.out.println("最大值"+Integer.MAX_VALUE);
        System.out.println("最小值"+Integer.MIN_VALUE);
        //case4:定义时未初始化或者超过范围,Java将直接报错,非常安全
        /*
        int c = 9999999999999999999999999999999999;//error
        int d;
        System.out.println(d);//error
       
      

B:long

需要注意

  • 无论在何种系统下,long都是4个字节
  • long包装类型为Long
  • long范围为:-263~ 263-1
  • case2:建议使用这种方式初始化,以区分int
  • case3:通过LongMAX_VALUEMIN_VALUE可以得到长整型的最大和最小值
public class TestDemo 
    public static void main(String[] args) 
        //case1
        long a = 100;
        System.out.println(a);
        System.out.println("--------------");
        //case2:初始化时为了进行区分,建议在后面加L
        long b = 100L;
        System.out.println(a);
        System.out.println("--------------");
        //case3:输出最大和最小值
        System.out.println("最大值"+Long.MAX_VALUE);
        System.out.println("最小值"+Long.MIN_VALUE);
    

C:short

需要注意

  • 无论在何种系统下,short都是2个字节
  • short包装类型为Short
  • short范围为:-215~ 215-1
  • case2:通过ShortMAX_VALUEMIN_VALUE可以得到短整型的最大和最小值
public class TestDemo
    public static void main(String[] args) 
        //cas1:
        short a = 10;
        System.out.println(a);
        //case2:
        System.out.println("最大值"+Short.MAX_VALUE);
        System.out.println("最小值"+Short.MIN_VALUE);
    

D:byte

需要注意

  • 无论在何种系统下,byte都是1个字节
  • byte包装类型为Byte
  • byte范围为:-128~127
  • case2:通过ByteMAX_VALUEMIN_VALUE可以得到byte的最大和最小值
public class TestDemo
    public static void main(String[] args) 
        //cas1:
        byte a = 10;
        System.out.println(a);
        //case2:
        System.out.println("最大值"+Byte.MAX_VALUE);
        System.out.println("最小值"+Byte.MIN_VALUE);
    

这里再补充一点,如下代码看似是没有错误的,因为变量b的结果是11,并没有超过byte的范围,但编译器却报出了错误

这是因为变量a的确是byte型的,但在Java中整型字面常量默认为int整型提升后变量a+1自然就变为了int型,类型不正确。正确写法如下

(2)浮点型变量

A:float

需要注意

public class TestDemo
    public static void main(String[] args) 
        //cas1:
        float a = 3.14F;
        System.out.println(a);
    

B:double

public class TestDemo
    public static void main(String[] args) 
        //case1:
        double  a = 3.14;
        System.out.println(a);

        //case2:
        int b1 = 1;
        int c1= 2;
        System.out.println(b1/c1);//不等于0.5,等于0
        double b2 = 1;
        double c2 = 2;
        System.out.println(b2/c2);//等于0.5
        System.out.println(b1*1.0/c1);//这样也是0.5

        //case3:
        double d = 1.1;
        System.out.printf("%.20f", d*d);
    

(3)字符型变量

需要注意

public class TestDemo
    public static void main(String[] args) 
        //case1
        char a = 'a';
        char b ='6';
        System.out.println(a);
        System.out.println(b);

        //case2
        char c = 97;
        System.out.println(c);

    

(4)布尔型变量

需要注意

  • 在Java中 boolean类型只有两种取值turefalse(没有所谓的0是假非0是真的说法)
  • boolean包装类型为Boolean
  • boolean没有规定它的大小
public class TestDemo
    public static void main(String[] args) 
        //case1
        boolean flg = true;
        System.out.println(flg);
    

四:Java类型转换

类型转换:Java是一门强类型编程语言,在进行变量赋值时会有严格的类型检查,检查不通过编译也会失败,如下

  • 在C/C++中顶多会给你一个warning,很不安全
public class TestDemo
    public static void main(String[] args) 
        int a = 10;
        long b = 100L;
        b = a;//编译通过
        a = b;//编译失败,4字节存不了8字节的
    

如果编译可以通过,那么当数据类型不一致时就会进行类型转换,分为两类

  • 自动类型转换(隐式)
  • 强制类型转换(显式)

(1)自动类型转换(隐式)

自动类型转换(隐式):即代码不需要经过任何处理,在编译时编译器自动进行转换;典型特征就是数据范围小的转数据范围大的

public class TestDemo
    public static void main(String[] args) 
        //case1:
        int a = 10;
        long b = 100L;
        b = a;//编译通过;4字节转向8字节
        a = b;//编译失败;8字节转向4字节会丢失

        //case2:
        float f = 3.14F;
        double d =5.12;
        d = f;//编译通过;4字节转向8字节
        f = d;//编译失败;8字节转向4字节会丢失

        //case3:
        byte b1 = 100;//编译通过;未超过byte范围,会将int下的100转化为byte
        byte b2 = 257;编译失败;超出范围,数据丢失
    

(2)强制类型转换(显式)

强制类型转换(显式):操作时,代码需要一定的格式处理,一旦强转意味着程序员需要为此次转换负责;典型特征就是数据范围大的转数据范围小的

  • 注意:强转不一定成功,两个不相干的类型不能强转
public class TestDemo
    public static void main(String[] args) 
        //case1:
        int a = 10;
        long b = 100L;
        b = a;//编译通过;4字节转向8字节
        a = b;//编译失败;8字节转向4字节会丢失
        a = (int)b;//强转

        //case2:
        float f = 3.14F;
        double d =5.12;
        d = f;//编译通过;4字节转向8字节
        f = d;//编译失败;8字节转向4字节会丢失
        f = (float)d;//强转

        //case3:
        byte b1 = 100;//编译通过;未超过byte范围,会将int下的100转化为byte
        byte b2 = 257;编译失败;超出范围,数据丢失
        byte b3 = (byte)257;//强转
    

五:类型提升

类型提升:不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的

①:intlong运算时int会被提升为long

public class TestDemo
    public static void main(String[] args) 
        int a = 10;
        long b = 20;
        int c = a + b;//编译错误,此时等式右边是long
        long d = a + b;
    

②:bytebyte运算时,各自都会提升为int

  • 其实:计算机为了硬件实现方便,对于低于4字节的类型,都会先提升int再参与运算
public class TestDemo
    public static void main(String[] args) 
        byte a = 10;
        byte b = 20;
        byte c = a + b;//编译错误,右面成了int了
        byte d = (byte)(a+b);//编译通过
    

六:字符串类型

  • 简单来说,它就是一个类,这个类给你封装好了很多借口,让你便于操作

和C++一样,Java中也适用String来定义字符串

public class TestDemo
    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);
    

很多时候,Stringint之间会经常相互转换,在Java中也是非常容易做到

public class TestDemo
    public static void main(String[] args) 
        //int转换为String
        int num = 10;
        String intToString = String.valueOf(num);

        //String转换为int
        String str = "100";
        int stringToInt = Integer.parseInt(str);

        System.out.println(intToString);
        System.out.println(stringToInt);

    

关于String类后面还会继续深入研究

以上是关于:Java常量数据类型变量类型转换类型提升和字符串的主要内容,如果未能解决你的问题,请参考以下文章

003_常量,变量和强制类型转换

java八大基本数据类型与运算符

java八大基本数据类型与运算符

JAVA SE JAVA基础强袭之路 数据类型及其转换和提升全面讲解(猛男细节+保底一个收藏)

JAVA-初步认识-第二章-自动类型提升&强制类型转换

Java学习6——基本数据类型及其转换