Java之数据类型,变量赋值

Java中的基础数据类型(四类八种):

  1.整数型     byte----使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。byte型是整型中所分配的内存空间是最少的,只分配1个字节;取值范围也是最小的,只在-128和127之间,在使用时一定要注意,以免数据溢出产生错误。

    short----short型即短整型,使用short关键字来定义short型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。系统给short型分配2个字节的内存,取值范围也比byte型大了很多,在-32768和32767之间,虽然取值范围变大,但是还是要注意数据溢出。

    int----int型即整型,使用int关键字来定义int型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。int型变量取值范围很大,在-2147483648和2147483647之间,足够一般情况下使用,所以是整型变量中应用最广泛的。

    long----long型即长整型,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。而在对long型变量赋值时结尾必须加上“L”或者“l”,否则将不被认为是long型。当数值过大,超出int型范围的时候就使用long型,系统分配给long型变量8个字节,取值范围则更大,在-9223372036854775808和9223372036854775807之间。

  2.浮点型     float----float型即单精度浮点型,使用float关键字来定义float型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。在对float型进行赋值的时候在结尾必须添加“F”或者“f”,如果不加,系统自动将其定义为double型变量。float型变量的取值范围在1.4E-45和3.4028235E-38之间。

    double---double型即双精度浮点型,使用double关键字来定义double型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。在给double型赋值时,可以使用后缀“D”或“d”明确表明这是一个double类型数据,但加不加并没有硬性规定,可以加也可以不加。double型变量的取值范围在4.9E-324和1.7976931348623157E-308之间。

  3.布尔型     boolean(true, false):布尔类型又称逻辑类型,只有两个值“true”和“false”,分别代表布尔逻辑中的“真”和“假”。使用boolean关键字声明布尔类型变量,通常被用在流程控制中作为判断条件。

  4.字符型     char:char型既字符类型,使用char关键字进行声明,用于存储单个字符,系统分配两个字节的内存空间。在定义字符型变量时,要用单引号括起来,例如‘s’表示一个字符,且单引号中只能有一个字符,多了就不是字符类型了,而是字符串类型,需要用双引号进行声明。

  基础数据类型变量和值全部存到栈,所以不能为空。

Java引用类型:

  所有的类   所有的数组   所有的接口

补充:Java堆栈:

  栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要 在运行时动态分配内存,存取速度较慢。 

 补充:Java中的运算符优先级

Java中的变量的赋值:

1.  赋值不能超过数据类型的范围

public class Test1
{
    public static void main(String[] args){
        //byte的范围是-128~127
        byte b=200;
    }
}

注:在Java中,给整数变量赋值时,后面的值会先给一个int

2.强制类型转换:

public class Test1
{
    public static void main(String[] args){
        //可以在值得前面写一个(byte)让他强制转换
        byte b=(byte)200;
        System.out.println(b);
    }
}

强制转换为byte类型之后,因为200大于了byte类型的最大取值范围127,所以会在从头开始,也就是再从byte类型的最小值-128开始数(200-127)位,得出-56。

3.

public class Test1
{
    public static void main(String[] args){
        short s=123;
        int i=50000;
        s=i;
    }
}

将i的值赋给s,类型不兼容,int的最大值超过了short的最大的范围

 4.

public class Test1
{
    public static void main(String[] args){
        long i=888;
        long l=88888888888;
    }
}

88888888888没有超过long的范围,为什么还是会报错?因为将数字赋给一变量时,首先给他一个int类型,而8888888888超过了int的范围所以报错,应该在超出范围的数字后面加一个l声明,l不分大小写。

public class Test1
{
    public static void main(String[] args){
        long i=888;
        long l=88888888888l;
        long k=88888888888L;
    }
}

 5.

public class Test1
{
    public static void main(String[] args){
        float f=12.345;
    }
}

小数变量的值默认为double型,如果需要可以加f进行声明:float f=12.345f; 。

double没有问题。

6.

public class Test1
{
    public static void main(String[] args){
        char a=98;
        System.out.println(a);
    }
}

ASCII表:

public class Test1
{
    public static void main(String[] args){
        short s=123;
        char a='a';
        System.out.println(s+a);
    }
}

在这样的运算中,计算的是它们在ASCII表中的位置的值。

类型转换优先级:

char  short  byte  进行运算的时候,默认取值为int

显式转换:也叫作强制类型转换,可能会导致精度丢失,精度由高到低,需要声明

隐式转换:精度由低到高,不需要声明

变量赋值练习:

        /*
        int a = 1, b = 2, c = 3;
        
         等价于
        int a;
        int b;
        int c;
        
        */
        int i = 1, j;
        // 等价于
        int i = 1;
        int j;

        float f1 = 0.1;
        //0.1默认类型为double,应 float f1 = (float)0.1;
        float f2 = 123;
        long l1 = 12345678, l2 = 88888888888;
        //l2的值超过了默认类型int的范围
        double d1 = 2e20, d2 = 124;
        byte b1 = 1, b2 = 2, b3 = 129;
        //b3的值超过了byte的范围, 应用b3=(byte)129;
        j = j + 10;
        i = i / 10;
        i = i * 0.1;
        //应用 i = (int)(i * 0.1);
        char c1 = 'a', c2 = 125;
        byte b = b1 - b2;
        //应改为  int b = b1 - b2;  或者   byte b =(byte) b1 - b2; 
        char c = c1 + c2 - 1;
        // int  c = c1 + c2 - 1;  或    char c = (char)(c1 + c2 - 1); 
        float f3 = f1 + f2;
        float f4 = f1 + f2 * 0.1;
        //double f4 = f1 + f2 * 0.1;  或    float f4 =(float)( f1 + f2 * 0.1);
        double d = d1 * i + j;
        float f = d1 * 5 + d2;
        //同上
        int a, b, c;
        a = 2;
        b = 'q';
        c = 4;
        char d = '5';
        byte e;
        e = a + b;
        //e =(byte) a + b; 
        boolean f = true;
        double g = 4.3;
        g += b;
        b += 0.3;
        b = b + 0.3;
        //b =(int) b + 0.3;
        c += f ? 2 : 4;
        float h = 12.5;
        //float h =(float) 12.5;
        float i = 14.5;
        //同上
        e = h + i;
        e += h;
        a += 2147483646;
        float j = h / 0.5;
        //float  j =(float) h / 0.5;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

《Java程序设计基础》 第8章手记Part 2

第八章内容 Part 2 - … - 抽象类和抽象方法 - 接口及接口的实现 - 利用接口实现类的多重继承 - 内部库和匿名类 ...

22490
来自专栏极客猴

Python中“is”和“==”的区别

相比 C/C++ 、Java 等强类型语言, Python 定义变量的方式就简单多了。我们只需要给变量起个变量名,而不需要给变量指定类型。

11120
来自专栏Python爱好者

Java基础笔记12

16330
来自专栏blackheart的专栏

[C#2] 1-泛型

1. 泛型概述 泛型是一种类型的多态;比如当我们写一个栈或者队列的时候,需要指定其数据类型,int一份代码,string一份代码,object的一份代码, 这些...

237100
来自专栏闻道于事

Java常见问题

自古深情留不住,总是套路得人心 最近经历了一次惨无人道的程序员笔试,真的是“笔”试,默默地来整理一下…… 以后遇到问题要多整理…… 常见套路: 当一个变量被赋值...

46760
来自专栏Python疯子

python实现括号匹配

首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:

54010
来自专栏转载gongluck的CSDN博客

野指针分析

1. 野指针的概念   所谓的野指针,就是说指针指向的那块内存,你没有合法操作的权限,也就是指针指向非法的内存空间,这样的指针就叫做野指针。 2. 野指针产...

39270
来自专栏前端知识分享

第38天:运算符、字符串对象常用方法

console.log(0||1);   1 console.log(1||0);   1 console.log(1||5);   1 console.log...

10220
来自专栏张首富-小白的成长历程

正则表达式

1.17 正则的引用 所在的位置就看左侧的"("所在的位置,在第一个就是\1,第二个就是\2,嵌套引用也是这个道理

31430
来自专栏老马说编程

计算机程序的思维逻辑 (13) - 类

类 程序主要就是数据以及对数据的操作,为方便理解和操作,高级语言使用数据类型这个概念,不同的数据类型有不同的特征和操作,Java定义了八种基本数据类型,其中,...

195100

扫码关注云+社区

领取腾讯云代金券