java基础:java基本数据类型详解

Posted maligebilaowang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础:java基本数据类型详解相关的知识,希望对你有一定的参考价值。

1.java基本数据类型

java有八种基本数据类型:

  • 4种整型 :byte,short,int,long
  • 2种浮点型:float,double (3.14F位浮点型,没有F默认为double)
  • 一种字符型:char
  • 一种boolean型:boolean

基本数据类型之间的类型转换??

1.1、自动转换: 低类型的向高类型的转换

1.2、强制类型转换

高类型的向底类型转换,但可能会数据溢出或者精度丢失
基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。

2. 基本数据类型对应的包装类

java是一门面向对象的语言,但是8中基本数据类型不具备面向对象的特征,所以实际使用中很不便所以为java八种基本数据类型提供了对应的包装类。

2.1 基本数据类型和包装类类型的区别

  • 包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是;
  • 包装类型是引用的传递,基本类型是值的传递;
  • 声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间;
  • 存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们,因此,包装类的效率会比基本数据类型的效率要低。
  • 初始值不同,比如:int的初始值为0、boolean的初始值为false,而包装类型的初始值为null;

2.2、自动装箱和自动拆箱

  1. 自动拆箱 包装类——>基本数据类型 (原理是调用了xxxValue方法)
  2. 自动装箱 基本数据类型——>包装类 (原理是调用了valueOf方法)
  • 包装类和基本数据类型比较时,只要值相等就相等
public static void main(String[] args) 
    Integer a1=127;
    Integer a2=127;
    int a3=127;
    Integer b1=128;
    Integer b2=128;
    int b3=128;
    System.out.println(a1==a2);
    System.out.println(a1==a3);
    System.out.println(b1==b2);
    System.out.println(b1==b3);


/*输出:true true false true

解析:自动装箱时采用valueOf方法,由于127在静态数组的范围内,所以不是new的,
而128的两个引用是指向new出现对象的,所以第一个是true,第三个是false。
而包装类和基本数据类型比较时,只要数值是相等的,就相等

3、为什么需要有包装类类型???

java程序中可以直接操作基本数据类型,但是某些情况下需要将它们看成对象来处理,这些情况下就需要借助于Java API中基本数据类型对应的包装类来处理了。

包装类主要作用:

  • Java中的基本类型不是面向对象的,它们只是纯粹的数据,除了数值本身的信息之外,基本类型数据不带有其他信息或者可操作方法。这在实际使用中存在很多不足,为了解决这个不足,对每个基本类型都对应了一个引用的类型,称为装箱基本类型。
  • 提供了一系列实用的方法,比如toString(),equals(),hsahCode(),wait(),notify()
  • java集合不允许存放基本数据类型,存放数字时要用包装类型;(为什么?)
    Java集合不能存放基本数据类型,只能存放对象的引用。每个集合元素都是一个引用变量,实际内容都存放在堆内或方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时会被收回。 可以通过包装类,把基本数据类型转化为对象类型,存放引用。有了自动拆箱和装箱功能,基本数据类型和其对应对象之间的转换变得很方便,把基本数据类型存入集合中可以自动存。

java基础语法学习day03---初学者必看详解

一、数据类型

1、基本数据类型

java分基本数据类型和引用数据类型
  基本数据类型只有84个整数2个小数2个非数
1)byte (字节) 1字节  -128~127
  不常用(IO学习时使用)

2)short(短整型) 2字节 -32768~32767
  不常用(和其他语言兼容使用)

3)int  (整型)   4字节  -21亿~21亿
  最常用的类型

4)long (长整型) 8字节  很大
  较常用(int类型不够用时使用)
  当赋值的数值大于int的取值范围时
  需要在这个值的后面加l或L

5)float (单精度) 4字节
  不常用,精度不足
  正常赋值时,
  如果赋小数值,需要在小数值
  后加f或F

6)double(双精度) 8字节
  常用
  精度较高

7)char (字符) 2字节  0~65535
  保存一位字符
  而且有且只有一位
  'a'  --  97
  'A'  --  65
  '0'  --  48
  
  特殊字符:转义符:\\
  '    --  \\'
  \\    --  \\\\

8)boolean (布尔)  1字节
  取值只有truefalse

2、数据类型转化

byte------short-----int——long-----float———double

​ char——

  • 自动类型转化(隐式类型的转化)

    从小类型到大类型是可以自动完成。

  • 强制类型转化(显式类型的转化)

    从大类型转小类型,需要进行强制转化符

    (需要转化成的类型)变量

    但是这样的话,可能会造成数据精度丢失或者溢出。

2.1、基本数据类型的注意事项

1)java中的数据直接量
在java代码中直接写出的数值
整数直接量是int类型
小数直接量是double类型
2)数据的溢出
当一个数据类型的变量接收了
大于自己范围的数据
就会产生溢出,这个现象不是
我们想看到的,所以了解即可,
不用研究
3)时间偏移量
1970-1-1 00:00
开始到程序运行时经过的毫秒数
long time=System.currentTimeMillis();
4)舍入误差
浮点型的计算可能会发生
计算结果不精确的情况
需要使用今后学习的引用类型解决
现阶段只需要了解这个现象就可以了

案例:

package cn.tedu.day06;

public class DataTypeChange {
	
	public static void main(String[] args) {
		
		int x = 5;
		
		//int---byte
		byte b = 56;
		System.out.println(b);
		//(要强转的类型)变量
		byte b1 = (byte)128;
		System.out.println(b1);
		
		//1、自动类型的转化
		int x1 = 5;
		int y1 = 6;
		long z = x1 + y1;
		System.out.println(z);//long
		
		long l1 = 1024l;
		//2、强转的时候,如果数据在转化范围内,就不会发生数据溢出
		int i = (int) l1;//强制转化
		
		long l2 = 1024l * 1024 * 1024 * 4;
		int i2 = (int)l2;//会发生溢出
		System.out.println(i2);//0  
		
		double pi = 3.1415926578976588;
		float f = (float) pi;//会造成精度的损失
		System.out.println(f);//3.1415927
		
		//3、数据类型运算的时候,自动类型的转化
		long hm = 365 * 24 * 60 * 60 * 1000;
		
		double d = 800 - 600.5;
		System.out.println(d);//199.5
		
		double d2 = 80 / 100;
		System.out.println(80 / 100);//0
		System.out.println(d2);//0.0
		
		double d3 = 80.0 / 100;
		System.out.println(d3);//0.8
		//多种基本数据类型参与运算的时候,结果会发生自动类型的转化。
		
	}
}

  • Byte/char/short——>int

    • int直接量可以直接赋值给byte、char和short,只要不超过表示的范围。
    char c = 65;
    byte b = 45;
    short s = 23;
    
    • byte、char、short三种类型参与运算的时候,先进行转化为int类型,再参与运算。

2.2、 数据类型的转换

1)java中运行计算的原则
java中只允许相同数据类型的数据
发生计算,计算结果还是这个类型

2)自动类型转换(隐式类型转换)
当不同数据类型的数据发生计算时
java系统会自动将较小的数据类型
转换成较大的数据类型
,计算结果是较大的数据类型

小 大
byte short int long float double
char
1.float类型比long类型大
2.byte\\short\\char计算结果都是int
3)强制类型转换(显式类型转换)
由程序员编写代码
将一个数据转成指定的类型
(<类型>)<变量\\数值>
double d=12.5;
int i=(int)d;//12.5–>12
强制类型转换可能造成精度丢失
当两个不同数据类型的数据计算时
想要较小的数据类型的结果

二、运算符

1、算术运算符

+ - *  /
    
%
++ -- 

    package cn.tedu.day06;
/**
 * 运算符
 * @author zhangjian
 *
 */
public class OperatorDemo {
	
	public static void main(String[] args) {
		//1.算术运算符
		System.out.println(3 + 2);//5
		System.out.println(3 - 2);//1
		System.out.println(3 * 2);//6
		System.out.println(3 / 2);//1
		//发生异常-java.lang.ArithmeticException 算术异常
		//System.out.println(3 / 0);
		
		//% 参与运算的时候,结果的正负与%符号左边的正负有关系。
		System.out.println(5 % 3);//2
		System.out.println(-5 % 3);//-2
		System.out.println(-5 % -3);//-2
		System.out.println(5 % -3);//2
		
		//++ --
		int x = 5;
		x++;//x = x + 1;
		System.out.println(x);//6
		++x;//x = x + 1;
		System.out.println(x);//7
		
		x--;
		System.out.println(x);//6
		--x;//x = x - 1;
		System.out.println(x);//5
		
		//a++  后增
		/*
		 * 当a++后增,参与运算的时候,先进行参与运算,后进行自增。
		 */
		int a = 6;
		int b = a++;
		System.out.println("a = " + a + ",b = " + b);//a = 7,b = 6
		/*
		 * ++m 前增
		 * 当++前增,参与运算的时候,先进行自增,再参与运算。
		 */
		int m = 6;
		int n = ++m;//先进行++m,得到m=7,后将m=7赋值给n,得到n=7
		System.out.println("m = " + m + ",n = " + n);//7 7
		
		int p = 6;
		int q = p--;
		System.out.println("p = " + p + ",q = " + q);//5 6
		
		int i = 8;
		int j = 7;
		i = --j;//i = 6; j = 6
		System.out.println("i = " + i + ",j = " + j);
		j = ++i;//i = 7;j = 7;
		System.out.println("i = " + i + ",j = " + j);
	}
} 

2、赋值运算符

​ = 赋值运算符,用于对变量进行赋值。把=右边的值赋值给左边的变量。

​ OperatorDemo01

​ 复合的赋值运算符

​ +=

-=

*=

​ /=

package cn.tedu.day07;
/**
 * 赋值运算符:=
 * @author zhangjian
 */
public class OperatorDemo01 {
	
	public static void main(String[] args) {
		//
		int num = 19, index;
		System.out.println(num);
		System.out.println(index = num % 3);//1
		System.out.println(index);//1
		
		int x, y, z;
		x = y = z = 66;
		System.out.println(z);//66
		
		//复合赋值运算
		x += 5;//计算的时候:x = x + 5;
		System.out.println(x);//x=71
		
		x -= 5;//x = x - 5;
		System.out.println(x);//x = 66
		
	}
	
}

3、关系运算符

用来判断数据之间的大小关系。

包括:大于、小于、等于(==)、大于等于(>=)、小于等于、不等于(!=)六种运算符。

关系运算符的判断结果为:boolean类型的。关系成立结果为true,关系不成立结果为false。

OperatorDemo02

package cn.tedu.day07;
/**
 * 关系运算符:
 * @author zhangjian
 *
 */
public class OperatorDemo02 {
	public static void main(String[] args) {
		int max = 30;
		int num1 = 6;
		boolean b1 = max > 35;//false
		boolean b2 = num1 % 2 == 0;//true
		boolean b3 = num1 % 2 != 0;//false
		System.out.println(b1);
		System.out.println(b2);
		System.out.println(b3);
	}
}

4、连接运算符

使用 + 进行字符串的连接。

字符串: 双引号引起来的 “ ”

OperatorDemo03

package cn.tedu.day07;
/**
 * 连接运算符:+
 * @author zhangjian
 *
 */
public class OperatorDemo03 {
	
	public static void main(String[] args) {
		
		//love520
		System.out.println("love520");
		int num = 1314;
		//love1314
		System.out.println("love" + num);//love1314
		//love1314520  ---- love1314 + 520 ---love1314520
		System.out.println("love" + num + 520);
		//love1834  ()优先级  优先计算括号里面的
		System.out.println("love" + (num + 520));
		
		System.out.println(520 + "love");//520love
		System.out.println(520 + 1314 + "love");//1834love
		System.out.println(520 + (1314 + "love"));//5201314love
		
		String msg = "love";
		msg = 520 + 1314 + msg + 521 + 1314;
		System.out.println(msg);//1834love5201314
		
		msg = "love";
		msg = 520 + (1314 + msg + 521) + 1314;
		System.out.println(msg);//5201314love5211314
		
	}

}

5、逻辑运算符

建立在关系运算之上的,包括:与&& 或 || 非 |

运算结果为:boolean类型的。

变量b1变量b2b1&&b2b1||b2!b1
trueTrueTrueTrueFalse
TrueFalseFalseTruefalse
FalseTrueFalseTrueTrue
FalsefalseFalseFalsetrue

使用&&运算符:

两个boolean类型的值,参与&&运算的时候,只有两边都为true的时候,结果才为true;

真真为真。

OperatorDemo04

package cn.tedu.day07;
/**
 * && || !
 * 逻辑运算符:
 * @author zhangjian
 *
 */
public class OperatorDemo04 {
	
	public static void main(String[] args) {
		int score = 58;
		//小明参加考试,如果考试成绩在80到100之间,奖励个四大名著一部。
		//  80 <= score <= 100
		boolean b = score >= 80 && score <= 100;
		//score >= 80  score <= 100 关系运算  boolean  
		System.out.println(b);//false
		
		//会唱歌或者会跳舞
		boolean sing = true;
		boolean dance = false;
		boolean b2 = sing || dance;
		System.out.println(b2);
		
		int x = 5;
		boolean b4 = sing || x++ > 3;
		System.out.println(b4);
		System.out.println(x);
		
		/*int m = 100;
		int n = 200;
		boolean b5 = (m > n) || (m++ > 200);
		System.out.println(b5);//false
		System.out.println(m);*/
		
		//短路逻辑
		int m = 100;
		int n = 200;
		boolean b5 = (m > n) && (m++ > 200);
		System.out.println(b5);//false
		System.out.println(m);//m = 100,不执行
		
		//! 非
		boolean isRain = true;
		boolean b7 = !isRain;
		System.out.println(b7);
	}
}

6、三元/目运算符

回顾:

1、JDK/JRE/JVM

2、跨平台

3、java环境变量的配置

4、Eclipse的使用

5、关键字

6、标识符

7、驼峰命名法

包、变量、方法、常量等

8、变量

9、常量

10、数据类型

基本数据类型

byte、short、int、long

float、double

char

boolean

类型转化:

自动类型转化

强制类型转化

11、运算符

算术运算符:+ - * /

++ –

%

以上是关于java基础:java基本数据类型详解的主要内容,如果未能解决你的问题,请参考以下文章

Java——Java基础

10.5-全栈Java笔记:常见流详解

Java 语法篇Java 变量八种基本数据类型及转换详解

深入Java基础--哈希表HashMap应用及源码详解

Java基础笔记----语言基础

java八种基本数据类型及包装类详解