java数据类型分为基本数据类型和引用数据数据类型:
基本数据类型:
数值型:1.整数类型(byte、short、int、long)2.浮点类型(float、double)
字符型:char
布尔型:boolean
引用数据类型:
类(class)
接口(interface)
数组([])
NO | 数据类型 | 大小/位 | 可表示的数据范围 | 默认值 |
---|---|---|---|---|
1 | byte(字节) | 8 | -128~127 | 0 |
2 | short(短整型) | 16 | -32768~32767 | 0 |
3 | int(整型) | 32 | -2147483648~2147483647 | 0 |
3 | long(长整型) | 64 | -9223372036854775808~9223372036854775807 | 0 |
3 | float(单精度) | 32 | -3.4E38(-3.4x1038)~3.4E38(3.4x1038) | 0.0 |
3 | double(双整型) | 64 | -1.7E308(-1.7x10308)~1.7E308(1.7x10308) | 0.0 |
3 | char(字符) | 16 | 0~255 | ‘\u0000’ |
3 | boolean(布尔) | - | ture或false | false |
任何一个数字常量(如30,100),都属于int类型。java中所有的整数内容默认情况都是int类型。
public class Test {
public static void main(String[] args) {
int num = 10;
int res = num * 2;
system.out.println(res);
}
}
结果:20
数据溢出问题
public class Main {
public static void main(String args[]) {
int max = Integer.MAX_VALUE; //取出最大值
int min = Integer.MIN_VALUE; //取出最小值
System.out.println(max);
System.out.println(min);
System.out.println(max+1);
System.out.println(min-1);
System.out.println(min-2);
}
}
结果:2147483647
-2147483648
-2147483648
2147483647
2147483646
结论:最大值如果继续增加就变成最小值,随后一直向其次的最小值进行循环,反之最小值减1就变成最大值,此种现象称为数据的溢出
扩大数据类型
public class Main {
public static void main(String args[]) {
int max = Integer.MAX_VALUE; //取出最大值
int min = Integer.MIN_VALUE; //取出最小值
//int变量±long型常量 =long型数据
System.out.println(max + 1L);
System.out.println(min - (long)1);
//iong变量±ing型常量 =long型数据
System.out.println((long) min-2);
}
}
结果:2147483648
-2147483649
-2147483650
需要重点记住的是:byte数据类型的取值范围:-128 ~ 127
public class Main {
public static void main(String args[]) {
int num = 130; //此范围超过了byte定义
byte x = (byte) num; //由int 变为byte
System.out.println(x);
}
}
结果:-126
考虑到byte类型较为常用,如果每次使用时都采用强制转换的方式比较麻烦,所以java对其有一些很好的改善,例如:byte自动转型
byte自动转型
public class Main {
public static void main(String args[]) {
byte num = 100; //100没有超过了byte的保存范围
System.out.println(num);
}
}
结果:100
虽然任何一个整数都属于int型,但是java编译时,如果发现使用的数据变量类型为byte,并且设置的内容在byte数据范围之内,就会自动帮助用户实现数据类型的转换。反之,如果超过了byte数据范围,则依然会以int型进行操作,此时就需要进行强制类型转换了。
在java中任何一个小数,默认数据类型都是double类型。
public class Test {
public static void main(String[] args) {
double num = 10.1;
int res = num * 2;
system.out.println(res);
}
}
结果:20.2
byte属于字节,一个字符=2个字节。
char:单个中文或者字母。
字母可以在int和char相互转换,Java使用的是UNICODE编码,此编码里包含了ASC II码的部分编码。
public class Test {
public static void main(String[] args) {
char c = 'A';
int num = c;
system.out.println(c);
system.out.println(num)
}
}
结果:A
65
字母大小写转换
public class Test {
public static void main(String[] args) {
char c = 'A';
int num = c;
num = num +32; //大写字母转换为小写字母,相差32
char b = (char)num;
System.out.println(c);
System.out.println(b);
}
}
结果:A
a
利用字符变量保存中文
public class Test {
public static void main(String[] args) {
char c = '王';
int num = c;
System.out.println(num);
}
}
结果:29579
布尔型是一种逻辑结果,java中只有true、false这两种。
public class Test {
public static void main(String[] args) {
boolean flag = false;
if(!flag){
System.out.println("hello");
}
}
}
结果:hello
String 属于引用类型
public class Test {
public static void main(String[] args) {
String str = "aaa";
system.out.println(str);
}
}
结果:aaa
public class Test {
public static void main(String[] args) {
system.out.println(3>2);
system.out.println(3<2);
system.out.println(3=2);
}
}
public class Test {
public static void main(String[] args) {
system.out.println(3+2);
system.out.println(3-2);
system.out.println(3*2);
system.out.println(3/2);
}
}
符号++、++符号的区别
public class Main {
public static void main(String args[]) throws Exception {
int a = 10;
int b = 20;
int res = ++a; //a先自增加1,然后res再等于a(此时a为11)
int ult = b++; //ult先等于b,也就是20,然后b再自增加1
System.out.println(res);
System.out.println(ult);
}
}
结果:11
20
符号+=、=+符号的区别
+= 是简写,a += 1就是a = a+1
=+并不是简写,a =+ a直接对a的赋值,±符号代表的是正负(完全可以省略不写),即a =+ b其实就是a = b
a= a+1与 a += 1区别
public class Main {
public static void main(String args[]) {
short s1 = 1;
s1 = s1 + 1; //编译报错
//s1 += 1 不报错,因为采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型
System.out.println(s1);
}
}
public class Test {
public static void main(String[] args) {
int numA = 10;
int numB = 30;
int max = numA > numB ?numA : numB; //条件成立返回numA,否则numB
system.out.println(max);
}
}
public class Test {
public static void main(String[] args) {
//& 和 &&区别 &&只要返回了false,后面的便不再判断,而&还会一直判断下去,&&性能更好
if((1==2)&&(10/0)){
system.out.println("条件满足")
}
}
}
public class Test {
public static void main(String[] args) {
if((1==1)||(10/0)){
system.out.println("条件满足")
}
}
}
面试题:请问如何更快计算出2的3次方?
如果直接采用2*2*2 很明显不是最快的,因为需要数学计算过程,由于计算机的数据都是按位保存的,所以面对此问题移位的速度是最快的。
public class Test {
public static void main(String[] args) {
// 2的二进制00000010 8的二进制00001000
int x = 2;
system.out.println(x << 2) //向左移2
}
}
if…else if …else语句
public class Test {
public static void main(String[] args) {
double s = 95.5;
if(s < 60.0){
system.out.println("条件满足A");
}else if(s >= 60.0 && s <80.0){
system.out.println("条件满足B");
}else{
system.out.println("上述添加都不满足时执行这条路径");
}
}
}
switch语句
关于switch允许的操作类型
public class Test {
public static void main(String[] args) {
int i = 95;
switch(i){
//i可以是int、char、String这三种类型
case 2:{
system.out.println("条件满足2");
break;
}
case 1: {
system.out.println("条件满足1");
break;
}
case 3: {
system.out.println("条件满足3");
break;
}
default: {
system.out.println("没有匹配内容");
break;
}
}
}
}
结果:没有匹配内容
//不使用break的switch语句
public class Main {
public static void main(String args[]) throws Exception {
int i = 100;
switch (i){
case 1:
System.out.println("1");
case 100:
System.out.println("100");
default:
System.out.println("1000");
}
}
}
//从运行结果来看,程序在第一个条件满足之后,由于没有设置相应的break语句,则从第一个满足条件开始就依次向下继续执行
结果:100
mm
while循环语句
实现1~100的累加
public class Test {
public static void main(String[] args) {
int i = 1;
int sum = 0;
while(i<=100){
sum = sum + i;
i++;
}
}
}
for循环语句
实现1~100的累加
public class Test {
public static void main(String[] args) {
int sum = 0;
for(int i =1 ; i <= 100; i++){
sum = sum +i
}
}
}
循环控制
continue使用
public class Main {
public static void main(String args[]) throws Exception {
for(int i = 0; i < 10; i++){
if(i==3){
continue; //跳出本次循环
}
System.out.print("i="+i+"、");
}
}
}
结果:i=0、i=1、i=2、i=4、i=5、i=6、i=7、i=8、i=9、
break使用
public class Main {
public static void main(String args[]) throws Exception {
for(int i = 0; i < 10; i++){
if(i==3){
break; //跳出整个循环
}
System.out.print("i="+i+"、");
}
}
}
结果:i=0、i=1、i=2、
一般在哪种情况下使用while或者for循环?
答:while循环一般用于不确定循环次数,但是确定循环结束条件的情况下。
for循环一般用于确定循环次数的情况下。
方法的基本格式:
public static 返回值类型 Test(参数列表) {
方法体;
return 返回值; //如果是void则无返回值
}
方法的重载是指方法名称相同,参数个数、参数顺序、参数类型不同。
参数个数不同
class Person{
public void aaa(){
system.out.println();
}
public void aaa(int i){
system.out.println(i);
}
public void aaa(String s , int i){
system.out.println();
}
}
参数顺序不同
class Person{
public void aaa(int i,double d){
system.out.println();
}
public void aaa(double d,int i){
system.out.println();
}
}
参数类型不同
class Person{
public void aaa(int i){
system.out.println();
}
public void aaa(double d){
system.out.println();
}
}
递归调用是一种比较特殊的调用形式,是指方法自己调用自己的形式。
实现1~100的累加
public class Test {
public static void main(String[] args) {
system.out.println(sum(100))
}
public static int sum(int num){
if(num == 1 ){
return 1;
}
return num+sum(num-1);
}
}
结果:5050