目录
1.隐式(自动)转换和强制转换
如果把一个取值范围小的数值赋值给取值范围更大的变量,就会把前者自动转换为取值范围更大的类型;如下所示,把int类型的a赋值给b的时候就会把a自动转换为double类型。
int a = 10;
double b = a;
但是,如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的。如果一定要这么做就需要加入强制转换,如下所示。
double a = 10.0;
int b = (int)a;
很简单的理解,把数据类型比作水盆,把更少的水倒进更大的水盆当然不会有错误,但是把更多的水倒入更小的水盆就需要人为介入了(强制转换)。
2.数组的静态/动态初始化
int[] arr ={1,2,3...}; //静态初始化
int[] arr = new int[n]; //动态初始化
在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值
整数类型:0
小数类型:0.0
字符类型:‘/u0000’,即空格
布尔类型:false
引用数据类型:null
3.Java的内存分配
Java内存分配五大区:
栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行
堆:存储对象或者数组,new来创建的,都存储在堆内存
方法区:存储可以运行的class文件
本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器:给CPU使用,和我们开发无关
4.方法重载
public class MethodDemo{
public static void main(String[] args) {
public static void fn(int a){}
public static int fn(int a){}
}
}
上面两个方法不构成重载,因为重载只看形参,不看返回值,从使用上来讲,调用方法的时候只需要方法名和形参就够了,所以这二者才能区分,比如下面就构成重载关系。
public class MethodDemo{
public static void main(String[] args) {
public static void fn(int a){}
public static int fn(int a, int b){}
}
}
另外构成重载的两个方法需要在一个类里面
public class MethodDemo1{
public static void fn(int a){}
public static int fn(double a){}
}
//不构成重载
public class MethodDemo1{
public static void fn(int a){}
}
public class MethodDemo2{
public static int fn(double a){}
}
//构成重载
5.方法的值传递
下面我们来看一个例子,
public class Demo{
public static void main(String[] args) {
int number = 10;
change(number);
System.out.println(number);
}
public static void change(int number){
number = 100;
}
}
//number的输出值仍然为10
我们从内存的角度分析,main进栈,change进栈,main出栈,main里面的number一直是不变的
想要达到交换的效果应该找一个中间变量来接收交换后的值。
public class Demo{
public static void main(String[] args) {
int number = 10;
int num = change(number);
System.out.println(number);
}
public static int change(int number){
number = 100;
return number;
}
}