1,给一个整数,如123,进行反转,即地位转高位,输出321。请写个函数
2,选择题,如下程序,gc什么时候执行
public void tMethod()
{
1, String s = new String("abc");
2, String b = s;
3, s = null;
4, System.out.println();
}
A,gc在3,之后执行
B,gc在4,之后执行
C,gc在函数体运行时间内不会执行
2,选择题,如下程序,gc什么时候执行
public void tMethod()
{
1, String s = new String("abc");
2, String b = s;
3, s = null;
4, System.out.println();
}
A,gc在3,之后执行
B,gc在4,之后执行
C,gc在函数体运行时间内不会执行
public void reverseInt(int inta)
{ char chrInta[] = String.valueOf(inta).toCharArray();
StringBuilder strbInta = new StringBuilder("");
int intb = 0;
int intLength = chrInta.length;
for(int i = intLength-1 ;i >-1; i-- )
{
strbInta.append(chrInta[i]);
} if(strbInta.indexOf("-")==-1)
{
intb = Integer.parseInt(strbInta.toString());
}
else
{
intb = -(Integer.valueOf(strbInta.substring(0, intLength-1)).intValue());
}
System.out.println(intb);
}
2,我选c
觉得gc线程优先级很低,不会立即执行。
还有就是原本s指向的那块内存被b指向了,应该没有什么垃圾可收集把
所以考虑性能的话应该直接对整数进行移位操作完成反转借助>>和>>>这两个操作符至于第2题的话:虚拟机内部对每个对象统一存在在堆区,然后引用是通过指针来指向堆区的对象的,只有当没有任何指针指向这个对象,垃圾收集线程一旦获得时间片就会回收这个对象的,所以这个题目似乎有些问题,如果没有引用指向"abc"对象,就会导致垃圾收集器回收它的,至少如果是我的话,我会去掉String b = c这一行,那么回收就会出现在s = null这个地方。这也告诉我们数据库Connection或者Socket这样的对象,不但要关闭,最好还加上一句connection=null和socket=null,这是良好的习惯,引用关系也不要乱传递。
String b = s;
所以已经有引用指向"abc" 了,所以应该没有垃圾可收了吧
123; 00000000 01111011
321; 00000001 00100001用移位 操做符号 可以?? 开玩笑的吧至于 gc 调用完全不是 程序调用 垃圾就会回收的 我觉得应该选c
System.gc();描叙:只能提示jvm尽可能快的回收 而不是马上回收
public int reverseInt(int value){
int tmp=value;
int m=0,q=0;
int result=0;
while(tmp!=0){
m=tmp%10;
tmp/=10;
result*=10;
result+=m;
}
return result;
}第二题
选C
gc在整个运行中都不会执行,除非你在程序中调用它,或者系统确实认为应该进行gc操作。以上为本人答案,仅供参考^^
public String reverse(int a){
char[] temp = String.valueOf(a).toCharArray();
int t = temp.length;
char[] temp2 = new char[t];
for (int j = 0;j < t;j++){
temp2[j] = temp[t - 1 - j];
}
return String.valueOf(temp2);
}后面一个问题主要牵涉到了一个gc的执行机制,小生浅薄,在这里给大家简单说说gc的执行机制。首先gc是一个所谓的精灵函数,主要由JVM负责调用。gc的执行时机之所以大家觉得高深莫测,主要是因为gc的执行机制比较复杂的原因。首先内存被gc分为四块,成为supervisor1和supervisor2,称为s1和s2好了。还有就是young generation和old generation。声明内存的时候,首先放到s1中。s1满了以后自动将所有的内容复制到s2中,并将所有的新的声明要求放在s1中。当s1再次填满以后,gc将进行一次 次要垃圾收集。这个时候进行的工作主要是检测所有s1和s2中的变量是否存活,并将存活的内容丢到young generation中去,s1,s2清空。这时候gc依然“接受”声明请求。当s1,s2再次被填满以后,由于此时young generation中也已经填满内容,将进行一次 次主要垃圾收集,将所有存活的内容进行整理,放在old generation中。继续前述过程。如果四个都填满,那么gc只有进行主要垃圾收集。这应该就是大家平时所说的“垃圾收集”了,这个收集比较消耗时间。结合上述文字,可以看到,单一的将变量或某对象的实例置null不一定能触发垃圾收集器。根据你的题目来看,出题者的意思应该是考察变量的生命周期。如果给我选择,我会选择最后一项。因为只是这样的声明不会造成s1和s2的满载。但是这个题目本省存在一定问题,不够严谨。
char chardata[] = String.valueOf(intdata).toCharArray();
int length = chardata.length;
char reverchardata[] = new char[length];
for(int i=0,j=0; i<length;i++){
reverchardata[j] = chardata[length- i-1];
j++;
}
String stringdata = String.copyValueOf(reverchardata);
int reverint = Integer.parseInt(stringdata);
System.out.println(chardata);
System.out.println(length);
System.out.println(reverchardata);
System.out.println(reverint);
}
第二个肯定是在赋为null之后执行 所以选a
很明显的亚, 程序 String s = new String("abc ");
String b = s;
s = null;只创建了一个string对象, s=null并不是destroy这个"sbc "的对象, 而是赋于为null的引用, b仍然指向"abc "对象, 打印看看, 就能证明了. System.out.println("b = " + b);
System.out.println("s = " + s);
String st=Integer.toString(ms);
StringBuilder sb=new StringBuilder(st);
sb.reverse();
System.out.println(sb);
第一题代码
static void n(int x){
if (x ==0 ){
return ;
}else{
System.out.println(x % 10);
n(x/10);
}
}
public static void main(String[] args){
String[] str = {"1b","2a","3","4"};
// f(str.length - 1,str);
n(123456789);
}
String b = s; // b被指向 s
s = null; //s引用值被摧毁,应该被gc了吧 ,但是"abc"常量对象还是存在的
int intb = 0;
StringBuilder strbInta = new StringBuilder(String.valueOf(inta));
strbInta = strbInta.reverse(); if (strbInta.indexOf("-") == -1)
{
intb = Integer.parseInt(strbInta.toString());
} else
{
intb = -(Integer.valueOf(strbInta.substring(0,
strbInta.length() - 1)).intValue());
}
System.out.println(intb);
/**
* 将n反转 并返回反转后结果
* @param n
* @return
*/
public static int reverse(int n) {
StringBuffer sb = new StringBuffer();//创建空的StringBuffer
sb.append(n).reverse();//将n添加到sb,然后反转。。
return Integer.parseInt(sb.toString());
}
public static void main(String args[]) {
System.out.println(reverse(12345));
}
}
第二题:
C。
修改后的代码:::
public class Test { /**
* 将n反转 并返回反转后结果
*
* @param n
* @return
*/
public static int reverse(int n) {
int isNegative = 1;
if (n < 0) {
n = (-n);
isNegative = -1;
}
StringBuffer sb = new StringBuffer();// 创建空的StringBuffer
sb.append(n).reverse();// 将n添加到sb,然后反转。。
return isNegative * Integer.parseInt(sb.toString());
} public static void main(String args[]) {
System.out.println(reverse(654321));
System.out.println(reverse(-123456));
}
}
#include <stdio.h>int fun(int n)
{
int num[100];
int i = 0;
int result = 0;
while (n != 0)
{
num[i++] = n % 10;
n /= 10;
}
for (int j = 0; j < i; ++j)
result = result * 10 + num[j];
return result;
}int main()
{
int n;
while (scanf("%d", &n) != -1)
{
printf("%d\n", fun(n));
}
return 0;
}第二题:选C,
因为b指向那块内存。
第二题选b,(很多人都选c,都说15楼的说法对,???真的吗?).String s = new String("abc ");
这句话15楼的说法是创建了一个对象,是一个吗?
应该是创建了2个呀.
所以当这个函数结束后,执行gc.
选择b
StringBuilder sb = new StringBuilder(hh);
String tt = sb.reverse().toString();
int h = new Integer(tt).intValue();2、答案为C
java 在调用gc是自动的,不是在每一个实例空间引用都为空的时候。
http://www.5inet.net/Develop/Java/040632.html
int a=123;
String s=""+a;
StringBuffer sbuf=new StringBuffer(s);
sbuf=sbuf.reverse();
System.out.println(sbuf);
第二题:
我认为是d; 解释:1.虽然s=null,但是b仍然指向abc,所以对象abc在堆中仍然存在。
2.调用gc()是JVM的事,何时调用不会确定。即使你人工调用gc(),仍然不一定立即执行,只是提醒一下JVM而已。
根据以上两种判断,无论考虑那种解释,都应该是d