Java的数据类型及其转换

  Java是一种强类型语言,每一个变量都必须声明数据类型才能使用。Java中有两种数据类型:基本数据类型和引用数据类型。

1.基本数据类型

一.基本数据类型的表示范围

  Java中基本数据类型共有四大类:整型、浮点型、字符型、布尔型,其值都存放在栈里。其中:

  • 整型用来表示整数,一共有四种类型:byte、short、int、long。
  • 浮点型用来表示小数,有两种类型:float和double。
  • 字符型是单引号括起来的字符或转义序列,用16位的Unicode编码作为编码方式,占两个字节。
  • 布尔型用于判断逻辑条件,只有“true”和“false”两种取值。

  整型和浮点型所占字节和表示范围如下:

整型 byte 占一字节 -27 ~ 27 -1      (即-128 ~127)
short 占两字节 -215 ~ 215 - 1(即-32768 ~ 32767)
int 占四字节 -231 ~ 231 - 1
long 占八字节 -263 ~ 263 -1 
浮点型 float 占四字节 2-149 ~ 2128 - 1
double 占八字节
2-1074 ~ 21024 -1

二.基本数据类型的相互转换

  Java中的基本数据类型转换一共有三种:

  • 扩展转换
  • 强制转换
  • 包装类过渡类型转换
 1.扩展转换

  当低精度类型转换成高精度类型时,不会发生信息的丢失。如下图所示:

  

  其中:

  • 实线部分表示转换过程中不会发生信息丢失,整型转为浮点型(除int转double外)都会发生信息丢失。
  • 当char转为int型时,是将字符的ASII码值转为int。
  • 高精度转低精度会发生信息丢失,需要用强制转换进行转换。
 1 byte a = 127;
 2 int b = a;
 3 System.out.println("the value of b is " + b);
 4
 5 //输出结果
 6 the value of b is 127
 7
 8
 9 char c = ‘c‘;
10 int d = c;
11 System.out.println("the value of d is  "+ d);
12
13 //输出结果
14 the value of d is 99
  2.强制转换

  强制转换常用高精度转低精度,语法格式为圆括号中给出想要转化的目标类型,后面紧跟需要转换的变量名,强制转化会发生溢出或精度下降。

double x = 9.997;
int y = (int)x;
System.out.println("the value of y is " + y);

//运行结果
the value of y is 9
   3.包装类过渡类型转换

  Java中的包装类是将简单数据类型当成对象包装成一个类,并封装一些转换功能,共有Boolean、Character、Integer、Long、Float 和Double,分别对应boolean,char,int,long,float,和double类型。其转换方法为:对于要转换的变量,首先生成变量当前的包装类,然后调用该包装类的转换方法进行转换。如:

float i = 100.0f;
Float x = new Float(i);
double d1 = x.doubleValue();

 

2.引用数据类型

  引用数据类型指向一个对象,不是原始值,指向对象的变量为引用变量,存放在堆中。

  在Java中,除去基本数据类型其余都为引用数据类型,共有类、接口和数组。常见有String,ArrayList,HashSet,HashMap以及自定义的类等。

  引用数据类型与基本数据类型比较相等的方式有所不同,基本数据类型是通过“==”,引用数据类型是通过调用equals()方法来进行比较。

  引用分类可分为强引用、软引用,弱引用和虚引用四种 。

  • 强引用(空间不回收)

    一般使用的引用都为强引用,通过new来创建。当内存空间不足时,虚拟机宁愿抛出OutOfMemoryError也不会回收该对象来解决程序的异常。

Object strongReference = new Object();

  在强引用对象不使用时,需要弱化该对象能够回收(strongReference=null)或使其超出对象的生命周期范围;强引用保存在栈中,引用内容保存在堆中,当强引用的方法运行完成时,就会退出方法栈,引用对象个数为0。此时便已超出生命周期,该对象便会被回收。

  • 软引用(空间不足就回收)

    软引用可以用来实现内存敏感的高速内存,当内存空间不足时,就会回收这些对象的内存。

    // 强引用
    String strongReference = new String("abc");
    // 软引用
    String str = new String("abc");
    SoftReference<String> softReference = new SoftReference<String>(str);

  软引用可以和一个引用队列(ReferenceQueue)联合使用。如果软引用所引用对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到与之关联的引用队列中。当内存不足时,JVM首先将软引用中的对象引用置为null,然后通知垃圾回收器进行回收。

  • 弱引用(发现便回收)

  弱引用软引用的区别在于:只具有弱引用的对象拥有更短暂生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定很快发现那些只具有弱引用的对象。

    String str = new String("abc");
    WeakReference<String> weakReference = new WeakReference<>(str);
    str = null;
  • 虚引用(任何时候都有可能回收)

  虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:

  虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

   String str = new String("abc");
    ReferenceQueue queue = new ReferenceQueue();
    // 创建虚引用,要求必须与一个引用队列关联
    PhantomReference pr = new PhantomReference(str, queue);

  

3.String与基本数据类型互相转换

  1.String转为基本类型

  • 只需要将封装器类型改成其对应的封装器类型,同时将“intValue”中的"int"改成其基本类型。  

    Integer.valueOf(str).intValue();

  • 通过Integer.parse*进行转换,parseInt”中的"Int"也转换成其基本类型但是此时该基本类型的首字母要大写。

   Integer.parseInt(str);

  2.基本类型转为String

  • String.valueOf(i)可以将整型转为String
  • 包装类的toString(i)方法,如Integer.toString(i)
  • i+""

  3.String与字符数组

  • 字符数组转String
char ch[] = {‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};
String str1 = new String(ch);        //第一种方法
String str2 = String.valueOf(ch);  //第二种方法
  • String转字符数组
String str = "hello";
char[] ch = str.toCharArray();

原文地址:https://www.cnblogs.com/thwyc/p/12232492.html

时间: 2024-10-09 20:31:26

Java的数据类型及其转换的相关文章

JAVA基本数据类型及其转换

Java语言是一种强类型语言.这意味着每个变量都必须有一个声明好的类型.Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型.Java另外还提供大数字对象,但它不是Java的数据类型. 1.整数: 定义:没有小数部分的数字,负数是允许的. 种类:Java提供四种整数类型: byte 1个字节(8bit) -128到127(-27~27-1)  默认为0 ,如 byte b=28; short 2个字节(16bit) -32,768到32,767(-

java的数据类型的转换

一:java的数据类型转换除布尔类型boolean(不能转换)有两种:<一> 自动转换: <二> 强制转换 <一>.自动转换:就是将小的数据类型自动转换成大的数据类型.如:int与byte计算时,byte(-128~127)自动的转换成int(-2147483648~2147483647)的类型. 0.1.基本数据类型自动转换: byte->short,char -> int -> long float -> double int -> f

Java中数据类型的转换

Java中的数据类型在定义时其实就已经确定了,所以是不能随意转换成其它的数据类型的.我们只能在一定程度上对其做类型转换的处理.转换的方式有 “自动类型转换”和“强制类型转换”两种. ①数据类型的自动转换: 假若在程序中定义好数据类型变量以后,又想用另一种数据类型来表示.Java只有在下列的条件都满足的情况下,才会做出数据类型的转换: 1.转换前的数据类型与转换后的类型兼容,也就是说只能是同一种数据类型,要么都是数值型,要么都是字符类型的: 2.转换后的数据类型表示范围比转换前的类型表示的范围大.

Java基础数据类型二进制转换

前言: 本文主要介绍java基础类型的二进制转换和二进制的基本概念. 二进制: 1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1. 2,在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味着一位16进制码由4位2进制码数表示. 3,在Java语言中byte代表最小计量单位,byte由8位2进制数组成. Java基本数据类型与表示范围(boolean忽略) 1,byte(整型):8位,short(整型):16位,char(字符型):16位,int(整型

学习Java基本数据类型与转换++,--等问题总结

java中的数据类型 java有4种类型分别是整数类型.浮点类型.字符型.布尔型.java的八中分类分别是byte.short.int.long.float.double.char.boolean简称4类8种. 那Java中字符串string属于什么数据类型? Java中的字符串String属于引用数据类型.因为String是一个类. 常量介绍 什么是常量: 在代码执行过程中其值不发生改变的量. Java中常量的分类 1.字面值常量 2.自定义常量 字面量常量的分类 1.字符串常量 2.整数常量

Java中数据类型及其之间的转换

Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种: 1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits). 2)float长度数据类型有:单精度(32bits float).双精度(64bits double),JAVA中将小数默认为double类型,若要定义float需在数据后面用f声明: 3)boolean类型变量的取值有:ture.false 4)char数据类型有:unicode字符,16位 对

Java数据类型的转换

Java数据类型的转换,基本类型的相互转换 1如何将字串 String 转换成整数 int? A. 有2个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 Stri

Java基础——数据类型之间的转换

Java数据类型分为三大类,即布尔型.字符型和数值型.其中数值型又分为整型和浮点型.Java的基本数据类型(8种)为布尔型boolean(1字节):字符型char(2字节):整型byte(1字节).short(2字节).int(4字节).long(8字节):浮点型float(4字节).double(8字节).此外,编程时还经常用到两种类变量,String和Date. Java数据类型的转换一般分三种,分别是:简单数据类型之间的转换.字符串与其他数据类型的转换.其他实用数据类型的转换. 简单数据类

Java中数据类型及其之间的转换(转)

Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种: 1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits). 2)float长度数据类型有:单精度(32bits float).双精度(64bits double),JAVA中将小数默认为double类型,若要定义float需在数据后面用f声明: 3)boolean类型变量的取值有:ture.false 4)char数据类型有:unicode字符,16位 对