java中的数据类型分两大类分别是基本类型和引用数据类型。
一、基本类型
1)Java中的数据类型有八种,即基本类型。具体如下:
数据类型位数取值范围:
Boolean1True|False
Byte8-128~127
Short16-32768~32767
Int32-2e31~2e31-1
Long64-2e63~2e63-1
Float32略
Double64略
Char160~65535
‘/u0000’~’uFFFF‘
二、引用数据类型
1)定义一个byte变量如:byteb=-256;
由于-256超出了’Byte’的取值范围,所以要使程序不报错,有一下几种解决方法:
A:更改变量的数据类型(如:将byte改为int)
B:更改变量名的赋值,使其包括在变量的数据类型的值域内;
C:进行强制转换:如:byteb=(byte)-256:
‘进行强制转换后,虽然程序不在报错,但是有可能会使原值的精度收到影响’
D:定义一个浮点类型数时,记得要在数值的后面加上“f”或“F”。(如:Floatf=10000.0f;)
E:若定义Charc=a;定义intn=c;则输出的n值为“a“的ASCII值,即97。
2)引用数据类型的定义
A:对象都是引用数据类型
B:应用类型使用NEW调用构造方法进行赋值
C:在Java中,除了基本数据类型以外,其余的全都属于引用数据类型,如:
a:API中的类,如String,File等;
b:数据;
c:自定义的类,如Cars,Student
d:对象全部是引用数据类型。
扩展资料
其他数据类型:
在java中,String本身也提供了很多的方法供我们使用:
获取到指定索引位置的字符:charc=字符串.charAt(索引位置)
获取到指定索引位置的字符:charc=字符串.charAt(索引位置)
获取第一次出现在字符串中的字符:intindex=字符串.index('a')
获取在字符串中字符的索引位置:intindex=字符串.index('a',1)
如果想比较两个字符串是否相等:字符串.equeals(字符串)
判断字符串是否为空:字符串.isEmpty()
获取字符串的长度:字符串.length()
根据某一个条件,将字符串进行分割:字符串.split("abc")
根据条件取出内容:字符串.substring(开始位置,结束位置)
java中有8中基本数据类型和3中引用类型1、8种基本类型
一)、4种整型
byte 1字节 -128——127
short 2 字节 -32,768 —— 32,767
int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)
long 8 字节 -9,223,372,036,854,775,808——9,223,372,036854,775,807
二)、 2种浮点类型
float4 字节 32位IEEE 754单精度(有效位数 6 – 7位)
double 8 字节 64位IEEE 754双精度(有效位数15位)
三)、1种Unicode编码的字符单元
char2 字节 整个Unicode字符集
四)、1种真值类型
boolean1 位 True或者false
2、3种引用类型
类class
接口interface
数组array
最简答来说除了8中基本类型以外剩下的都是引用类型Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类
boolean -->Boolean
char --->Character
byte -->Byte
short -->Short
int -->Integer
long -->Long
float -->Float
double -->Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性,这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。
因为封装类型是对象,所以可以进行相应的很多对象能力函数操作,这样就可以提供很多基本类型难以完成的工作的完成和实现。
你可以通过以下方式来声明该类型。
int a,a为int类型的变量
char a,a为char类型的
String对象
1. 首先String不属于8种基本数据类型,String是一个对象。
因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
3. String str=”punkll”;
String str=new String (“punkll”)的区别:
在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
看例1:
String s0=”punkll”
String s1=”punkll”
String s2=”punk” + “ll”
System.out.println( s0==s1 )
System.out.println( s0==s2 )
结果为:
true
true
首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。
因为例子中的s0和s1中的”punkll”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”punk”和”ll”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”punkll”的一个引用。
所以我们得出s0==s1==s2
用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
看例2:
String s0=”punkll”
String s1=new String(”punkll”)
String s2=”punk” + new String(“ll”)
System.out.println( s0==s1 )
System.out.println( s0==s2 )
System.out.println( s1==s2 )
结果为:
false
false
false
例2中s0还是常量池中”punkll”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”punkll”的引用,s2因为有后半部分new String(“ll”)所以也无法在编译期确定,所以也是一个新创建对象”punkll”的应用明白了这些也就知道为何得出此结果了。