小白Java笔记——数据类型

一、数据类型分类

  • 之前说过Java是强类型语言,意思是所有的变量必须先声明后使用;指定类型的变量只接受与之匹配类型的值。

  • 声明变量很简单,只要定义变量类型和变量名即可:

type varname[ = 初始值];
  • 说明一下“变量”:编程的本质是对内存中数据的访问和修改。我们需要一种机制来访问或者修改内存中的数据,这种机制就是变量。每个变量都代表某一小块内存。我们对变量赋值就是把数据装入内存。通俗的理解,变量就是一种容器,来装不同类型的数据的。
  • 变量的作用范围:成员变量和局部变量。
  • 定义变量类型可以是Java支持的所有类型。
  • Java语言支持的类型:基本类型和引用类型
    1.基本类型:boolean类型和数值类型(又分为整数型和浮点型)
    2.引用类型:类、接口、数组类型和特殊的null类型。指的是对一个对象(包括数组和实例两种)的引用。实际上引用类型就是一个指针,只是Java语言里不再使用指针的说法。
    注意:空引用只能被转换成引用类型,不能转换成基本类型,所以不要把null值赋给基本数据类型的变量。
    这里写图片描述
    二、基本数据类型
    (一)整数

  • int(-2^31~2^31-1)常用的整数类型,如果未指定类型,默认是int类型,所以有以下几点注意:

//1.下面代码正确,系统会自动把56当成byte类型处理
byte a = 56;
//2.下面代码错误,系统不会把999999999999当成long类型,即使超出int范围,所以出现错误
long bigValue = 999999999999;
//3.下面是正确表示,需要用l或者L强制转换,建议用L方便识别,不与I混淆
long bigvalue2 = 999999999999L;
//4.下面是正确的,在int的表数范围内,直接赋给long变量,Java依然会当成int处理,但是int可以自动类型转换到long类型
long demo = 999999999;
  • 整数值的4种表示方式:十进制、二进制、八进制和十六进制
    这里写图片描述
    Java对二进制的支持:
public class IntegerValTest{
  public static void main(String[] args){
  int binVall = 0b110010100;
  byte binVall2 = 0B01101001;
int binVall3 = 0B10000000000000000000000000000011;
 System.out.println(binVall);
System.out.println(binVall2);
System.out.println(binVall3);
}
}
//结果是:
404
105
-2147483645
  • 代码中变量binVall3定义的是32位二进制整数时,最高位是符号位:1代表-,0代表+;负数在计算机是以补码形式存在,因此要转换成原码。
    这里写图片描述
    联系前面所说:
/*
定义一个8位的二进制整数,数值默认占的是32位(int),因此是正数
只是强制转换的时候换成byte溢出,变成了-23
*/
byte binVal4 = (byte)0b11101001;
/*
定义一个32位的二进制整数,最高位是1,
由于加了L因此转换成long类型,占64位,因此第32位就不是符号位
所以是正数
*/
long binVal5 = 0B10000000000000000000000000000011L;

(二)字符型

  • 字符集的概念:给所有的字符编号组成总和。因为计算机无法保存电影、音乐、字符…..计算机只能保存二进制码,因此需要把他们全都转换成二进制码。因为对于保存字符简单,所以就直接对字符进行编码,当要保存时,就将对应的字符的编号进行二进制的转换即可。
  • 字符型必须用单引号括起来
  • 三种表现形式:1.直接用单个字符表示字符型值,如‘A’、’9’;
    2.通过转义符表示特殊字符,如‘\n’;
    3.直接使用Unicode值表示字符型值,如‘\uXXXX’
    这里写图片描述

  • 由于计算机保存字符的时候,保存的是对应的编号,所以char的类型可以直接作为整数值来使用,相当于16位的无符号整数,表述范围为0~65535.

public class CharTest{
  public static void main(String[] args){

char aChar = 'a';//直接指定单个字符作为字符值,输出就是a
    char enterChar = '\t';//使用转义符
char ch = '\u9999';//使用Unicode编码
System.out.println(ch);
char feng = '疯';//定义一个疯字作为字符值
int fengValue = feng;//直接将char变量当成int变量来用
System.out.println(fengValue);
char c = 97;//直接把在char表数范围内的int数值赋给char变量
System.out.println(c);

}

}

结果是:

30127
a
  • Java语言没有提供表示字符串的基本数据类型,而是通过String类表示字符串,需要用双引号括起来。
String s = "沧海月明珠有泪,蓝田玉暖日生烟";

(三)浮点型

  • 类型:float(单精度浮点数,4字节、32位)和double(双精度浮点数,8字节、64位)。
  • 表示的形式:1.十进制形式。如5.12、0.512,必须有一个小数点,否则就当成int类型;
    2.科学计数法:5.12e2(就是5.12x10的2次方)。只有浮点类型的数值才能用科学计算方法。
  • Java语言默认是double类型,如果要当成float类型,则必须加F或f。
  • 三个特殊的浮点数值:正无穷大(POSITIVE_INFINITY)、负无穷大(NAGATIVE_INFINITY)和非数(NaN)。
  • 注意只有浮点数除以0才可以得到正负无穷大,当然非数也适用,否则会出现报错。
    具体例子:
public class FloatTest{
   public static void main(String[] args){
    //观察下面af的变化
    float af = 5.2345556f;       
    double af1 = 5.2345556;
    System.out.println(af);
 System.out.println(af1);
double a = 0.0;
float af3 = -5.2f;
System.out.println(af/a);//正无穷大
System.out.println(af3/a);//负无穷大
System.out.println(a/a);//非数
System.out.println(0/0);//抛出异常
double c = Double.NEGATIVE_INFINITY;
float d = Float.NEGATIVE_INFINITY;
System.out.println(c==d);//float和double的无穷大相等
System.out.println(a/a==Float.NaN);//两个非数不相等
System.out.println(6.0/0==55.0/0);//所有正无穷大相等,适用于负无穷
}

}

结果:

5.2345557
5.2345556
Infinity
-Infinity
NaN
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at FloatTest.main(FloatTest.java:12)
true
false
true        

出现的错误:

 错误: 不兼容的类型: 从double转换到float可能会有损失
    float af1 = 5.2345556;

解决:涉及到下一个知识点类型的转换,详细的以后说,这里修改把float变成double,因为本来就是想定义一个double类型。
(四)数值下面使用下划线分隔
作用:更直观的查看数值多的位数

int binVal = 0B1000_0000_0000_0000_0000_0000_0000_0000;
double pi = 3.14_15_92_65_36;

(五)布尔型
只能用字母表示的true和false,占用8位。

public class BooleanTest{
 public static void main(String[] args){

  boolean b1 = true;
  System.out.println(b1);

  String str = true+"";
  System.out.println(str);
}
}

结果是true true;

  • 从结果上可以得出啊,虽然说其他基本类型数值不能转换成为boolean型,但字符串”true”和”false”可以间接的通过一个boolean值和字符串进行连接运算,那么boolean值可以转换成字符串。

这里插入一个自己的理解:
如刚才那个 String str = true+”“;
=后面有true是boolean类型的,如果要将自己赋值给前面的String类型的str变量,就不仅要将自己的值还要将自己的类型都转换成与String类型相符的,因此true需要转换成字符串类型才能进行赋值。

  • 控制的流程:
    1.if条件控制语句;
    2.while循环控制语句;
    3.do循环控制语句;
    4.for循环控制语句;
    5.三目运算符(?:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值