- 简述Java中内存分配的问题
- 凡是new() 出来的东西,都是堆中进行分配的
- 局部变量【数据类型+变量名】都是在栈中进行分配的
- 静态变量【static】和字符串常量【”String”】都是在数据区进行分配的
- 方法【代码】都是在代码区进行存放的
- 简述Java中Object类的地位
- Java中所有的类【自己定义的类以及Sun公司提供的类】都默认自动继承了Obeject类
- Java中所有的类都从Object类中继承了toString()方法、hashCode()方法和equals等方法
给出一组年龄,用冒泡排序求最大年龄,最小年龄
法一
1 | //求出最大年龄,求出最小年龄,求出平均年龄 |
不使用第三个变量交换两变量的值
1 | /** |
使用Java倒序输出12345
原理:%取最后一位,/取整除掉最后一位
逐行输出
1 | int t = 12345 ; |
一次性输出
1 | int num = 12345; |
Java实现九九乘法表
关键难点:内循环的条件判断1
2
3
4
5
6
7
8
9public static void main(String[] args) {
//九九乘法表
for(int i = 1 ;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+" ");
}
System.out.println("\n");
}
}
java中内存分配策略及堆和栈的比较
内存分配策略
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.
静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。
静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放.
Java内存机制和内存地址
问题一:
String str1 = “abc”;
String str2 = “abc”;
System.out.println(str1==str2); //true
问题二:
String str1 =new String (“abc”);
String str2 =new String (“abc”);
System.out.println(str1==str2); // false
问题三:
String s1 = “ja”;
String s2 = “va”;
String s3 = “java”;
String s4 = s1 + s2;
System.out.println(s3 == s4);//false
System.out.println(s3.equals(s4));//true
由于以上问题让我含糊不清,于是特地搜集了一些有关java内存分配的资料,以下是网摘: