Javaは強く型付けされた言語であり、各変数は、使用するデータ型を宣言する必要があります。基本データ型と参照データの種類:Javaは、データの2種類があります。
1.基本データ型
基本データ型表現の範囲
Javaの基本データ型四つのカテゴリーがあります:整数、浮動小数点、文字、ブール、その値がスタックに格納されているが。どこで:
- 長い、バイト、ショート、int型:整数は、4種類の合計を整数を表すために使用されます。
- floatとdouble:10進浮動小数点を表すために使用される、2つのタイプがあります。
- 文字は16ビットのユニコードが、2つのバイトを符号化するようにコードを有する単一引用符で囲まれた文字、またはエスケープシーケンスです。
- 条件を決定するブール論理、唯一の「真」と「偽」二つの値。
整数および浮動小数点のバイトとは、以下の占める範囲を示しています。
整数 | バイト | バイトを占め、 | -2 。7〜2 。7 1(すなわち、-128 127) |
ショート | 2バイトの会計処理 | -2 15 2へ15 - -1(〜32767即ち-32768) | |
int型 | 4つのバイトを占め、 | -2 31〜2 31 - 1 | |
長いです | 8バイトの会計処理 | -2 63 〜2 63 -1 | |
フロート | 浮く | 4つのバイトを占め、 | 2 -149〜2 128個の - 1 |
ダブル | 8バイトの会計処理 | 2 -1074〜2 1024年 -1 |
II。基本データ型変換
3の合計でJavaの基本的なデータ型変換:
- 拡張変換
- キャスト
- 包装遷移型変換
1.拡張変換
高精度タイプにおける低精度の変換タイプは、情報の損失が発生しない場合。下図のように:
どこで:
- 実線は整数への情報フロートの損失を生じない変換プロセスを示している(INT他の外側の二重回転)情報の損失が発生します。
- int型へのチャーは、int型へのASII文字コードの値があるとき。
- 低精度精度情報の損失が発生したために、キャストを変換する必要があります。
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;
- 虚引用(任何时候都有可能回收)
虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:
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();