2-变量、类型

转义字符

将一个字符的原始含义进行转换,使用 \ 进行转换。常用的有:

  •  : 专用作转义的斜杠,特殊具有歧义的都可以加上输出
  • \t : 制表符,相当于一个tab键,默认的是8个字符。具体情况上下文具体而定。
  • \n : 换行符代表的是换行

基本数据类型

数据类型就是数据类型,字面量也分数据类型。而不要理解为变量才有数据类型,变量的数据类型

分类

基本数据类型

用到的最多的简单类型

四类八型,这八型都是关键字

  • 整数类型(整型)
    • byte,字节,占用空间1字节,表示范围-128~+127
    • short,占用2字节,表示范围-32768~+32767
    • int,是Java中的默认整数类型(如果不指定那就是int型的常量或变量,如果超过int范围就要加后缀)。占用4个字节。-21亿~+21亿
    • long,占用8个字节,用来计时间是最常见的。
  • 浮点类型(浮点型)
    • 浮点数的表述的都是大概的值,本身就是近似值
    • float,单精度浮点类型,占用4个字节,表示小数需要在后面加上f,或者F。
    • double,Java中默认浮点类型(如果不指定那它就是double的常量或变量,指定就是后面加后缀),双精度浮点类型,占用8个字节。定义浮点型带小数点的时候会默认成double型,用float都定义不了。这时候想用float定义的时候一定要再float的值后面加F才行。如果没有小数点可以不加,那不涉及浮点数。
  • 字符类型(字符型)
    • char,表示单个字符,占用2个字节,一个汉字占用2个字节,所以可以保存汉字,不能保存空的字符。
  • 布尔类型(布尔型)
    • boolean,只有两个值,true,false
  • 注:
    • String字符串不是基本类型,而是引用类型
    • 数字类型的大小是有排序的,byte->short->int->long->float->double
    • 浮点型数据表示的是一个近似值,不是具体值
    • float类型接受小数必须写上“f”或者“F”
    • long类型的数据,如果超过了int的范围就要加上“L”或者“l”
    • 一般后缀都推荐大写
  • 特别注意:

    • 引用CSDN:这还要说java是种强类型语言,你在做赋值运算的时候其实等号两边的类型都是确定的,能赋值成功,要么两边类型一致,要么两边类型具备某种关系(继承或者实现),要么编译器通过上下文可以判定,比如,1、byte x = 1;1是个整数字面量,是int类型,这个值在byte类型的范围之内,这个时候编译器会帮你做类型转换,只留下int类型8位,前面的0都去掉。2、浮点类型的字面量类型默认是double,但是由于float类型和double类型在内存中的二进制表现形式不同,不能像整形那样有时会默认转换,必须要确定类型,带上f。
    • 整型默认是int 超过int范围就要加后缀,告诉Java这是long型。所以给long赋值的时候当值超过int的范围就要加上L这样才能正确的继续追加。
    • int字面量给byte赋值的时候是因为,Java检测到大小自动转换成byte。
    • double给float赋值的时候就要加F,因为它俩不是一个模型,告诉它这是F型。
    • byte 和 int 是亲兄弟,所有字面量超标和缩表都要加后缀,但是这俩会自动检测大小不用额外的加。

      引用数据类型

接口、一个事物的整体
String字符串和任意类型相加都是String类型

学到面向对象再细讲

变量

概念:在合理范围内能够不断变化的数据
变量在定义的时候一定要初始化,只不过成员(全局)的初始化Java有默认赋值0,使用时不会报错。但局部的初始化没有默认值,只能自己赋值,不然一使用就报错。所以可以说成一定要初始化。

  • 定义的同时赋值

    扫描二维码关注公众号,回复: 7317001 查看本文章
    • 数据类型 变量名 = 值;
    • 数据类型 变量1 = 值1,变量2 = 值2,变量3 = 值3;
  • 先定义,后赋值

    • 数据类型 变量名; 变量名 = 值;
  • 注:

    • 同一个代码段中不能重复定义变量,可以重复赋值。
      • 但是如果同名变量是的死亡了,就可以使用这个变量名了。
      • 这种情况发生在,作用域内的变量死了。作用域外地变量可以使用。
    • 变量要初始化才能使用。但是全局变量是可以的,全局变量是有默认值的。
    • 用byte、short去做四则运算的时候会自动转成int类型。

运算符

  • 算符运算

    + - * / ++ -- %

    • int类型 和 int类型 运算的时候是不涉及浮点操作的,int 接收的只能是整数,小数会擦掉。

    • 两个 变量或 常数 整数相运算的结果是整数,要想带小数的只能让数据与小数运算,要么它本身带小说本身就是小说,要么去和1.0这种数运算一下,不损失数据。

    • 两种类型的数据运算,结果会编程精度大的那个。

    • 除法,整数之间的除法会发生精度流失。

    • 取模,模数的符号是来自被取模的符号。
      整除的结果是0
      结果的正负号取决于被模数的正负
    • 加法:

      • 求和

      • 字符串的拼接,字符串的数据和任何类型的数据用“+”拼接最后都会变成字符串。

        "5+5="+5+5 输出 5+5=55    错的
        "5+5="+(5+5) 输出 5+5=10  对的
        只要改变计算的优先级就可以解决,程序是顺序执行的
      • 字符类型与整数的相加相减,就是对ASCII码进行加减。最后的结果根据返回类型进行返回。会将字符数据转换成对应的十进制整数,再与整数相加。
        Unicode 码表,前128位与ASCII码表相同,并且收录了各个国家地区的码表。万能表。

    一元运算符++ --
    • ++x 等价于 x = x +1;
    • 计算时从左向右的
    • 自身单独操作时符号前置后置都是可以的,不影响结果
    • 后置代表先把这个一元运算执行一遍(过一遍),一遍之后他的值再改变,这个后改变的值已经和先前执行过的值没有关系了。这个改变的值相当于只能为下一次用到这个值做准备。简单点就是:先执行再赋值(变值)。
    • 前置代表先赋值(变值)再执行其他操作。
    • 小数也是可以进行,计算的。
  • 赋值运算符 = += -= *= /= %=
    • = :赋值
    • += :i += 3; 等价于 i = i +3;
    • 注:
      • 常量不能被赋值
  • 比较运算符== > < >= <= !=
    比较运算的结果是boolean值
    • == :是否相等
    • !=:判断两数是否不等
  • 逻辑运算& | ! && || ^
    逻辑运算的结果也是Boolean值
    • & :与,判断式的两边是否同为真,同为真才是真
    • | :或,只要有一边为真就是真
    • ! :非,取反
    • ^ :异或,不同时为真
    • && :和&的作用一样只是先判断左边,当判断左边为假的时候就不判断右边了。返回结果。而&会两边都判断。工作中用的多
    • || :只要判断左边为真的时候直接就返回真。右边不判断。工作中用的多
  • 三元运算
    三元运算表达式的结果必须得到一个确切的值
    • 格式:表达式1?表达式2:表达式3;
    • 逻辑:表达式1为真,执行表达式2,表达式1为假执行表达式3。
  • 位运算
    只有是常数的时候才会进行位运算,将十进制数转换成二进制数。根据逻辑与、或进行运算,最后转成十进制。

      或    System.out.println(3 | 4);   输出 7
      与    System.out.println(3 & 4);   输出 0
      或    System.out.println(3 | 10);  输出 11
  • 左移

    System.out.println(3 << 1); 输出 6  
    将3向转换成二进制,然后向左移1位,变大了。
    其实就是 3*2^1
    比如 3 << 4 就是 3*2^4 等于 48

    类型转换

    不同数据之间是否可以一起运算? 是可以的。

    自动类型转换(隐式)

  • 概念:不同数据类型运算时,数据范围小的数据类型,会自动转换成范围大的数据类型,不流失精度,是合理常用的方式,小可转大。但是数据范围大的数据不能转换成数据范围小的数据,不管值是大是小,只能使用强制类型转换。因为它比较的不是值的大小,而是类型范围大小。只要类型的范围比转的类型范围大,都要强转。但是强转会导致精度流失,不推荐的。这里提到的变量类型不只是变量,同时还有字面量也是
  • 范围:byte->short->int->long->float->double
  • 疑问:大转小不行,但为什么可以short x = 8;这样给short赋int类型的值可以呢?没错它的确是int类型,但是Java检测到它是符合范围的,所以可以赋值。但是如果这样int x = 8;byte s = x;这样就不可以,因为Java不知道x的值是多少所以是不可以的,恰巧ide知道所以ide提前给你报错。
  • 特别注意:
    • **在java运算中,在涉及到数据类型范围小于int的(如byte,char,short)时,数据类型会自动提升为int类型,当他们的结果提升为int型的时候就不能用小于int的类型接收数据了,最差也要强转,不然出错。比如,两个byte类型的数据在进行运算时,运算结果就会变成int类型,如果要结果是byte类型的话,就要强转成byte类型,这是因为java编译器内部对其进行处理。比如:char*short就是int类型。比如:char+float=float这就不是三者内部运算了。这里要明白,不知三者自己之间运算会提升为int,即使三者外大于int的其他类型计算也会提升为int,从char+float的结果为数字就可以看出。**
    • 自增自减本身存在强制转换,不会报错++ -- += *= /=
    bb = (byte)(bb + 1); 不报错 以int运算返回int,又转成byte
    bb = (byte)bb + (byte)1; 报错 最后又变成int进行运算,返回int

强制类型转换(强转)

  • 基本数据类型不建议数据类型转换的,也称为强制类型转换。
  • 作用:使用特定的格式将数据范围大的类型转换成数据范围小的数据类型。
  • 格式:范围小的数据类型 变量名 = (目标类型) 范围大的数据值;
  • 注:日常生活中基本不使用对基本数据类型进行转换,强制转换,因为大部分的转换都会导致精度流失,这么做处理能让它不报错,没有好处。
  • 基本数据类型不建议用强制类型转换。

    总结

  • 类型范围小转大可以
  • 类型范围大转小不行,要强转,会失精
  • short byte char 三者互相四则运算会转 int 因为它们的范围太小
  • ++ -- += 等会自动强转

猜你喜欢

转载自www.cnblogs.com/macht/p/11546912.html