java基础题

1、如果6*6=40,那么12*5=?

分析:本题考查进制计算

      抽象一下,假如有427件货物,将这些货物打包,假设,1个包裹可以装10件货物,,1个箱子可以装10个包裹,则这些货物可以装42个包裹和7件货物,也就是4个箱子,2个包裹和7件货物。这样可以抽象的等同与十进制表示的427。

      那么八进制表示的427,也可以解释为8件货物装1个包裹,8个包裹装1个箱子,那么有几件货物呢?

      427(8)=4*8^2+2*8^1+7*8^0=279

      由此我们可以推导出公式:

      m位n进制数转化为十进制表示

      A...BC(n)=A*n^(m-1)+...+B*n^1+ C*n^0

解:由常识,十进制表示的6*6=36,这里6*6=40显然不等于36.

       根据等式

          6(n)*6(n)=40(n)

          (6*^n^0)*(6*^n^0)=4*n^1

       =>n=9

         得到该式为9进制的运算

         那么12(9)*5(9)=1件包裹和2件商品(11)*5件商品(5)=55(10)=55件商品9件打一个包裹,那么打了6件包裹,余下1件商品=61(9)。

2、说出下面程序运行结果

public class HelloWorld {
    public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        String s3="helloworld";
        String s4="hello"+"world";
        String s5=s1+s2;
        System.out.println(s3==s4);
        System.out.println(s3==s5);
    }
}

分析:本题考查编译原理

在点击程序运行按钮之后,javac编译器把s1、s2和s3两个字符串丢入内存中的堆中的常量池中,存放过程我们可以这么理解,在放入常量池之前问档案室(常量池),有没有"hello","world","helloworld"这三个常量,没有就放进去;到了s4,s4在编译的过程中已经做了“加法”,也就是说"helloworld"和"hello"+"world"可以看作是两个相同的字符串,,因此,在放入常量池之前会问常量池中有没有"helloworld"这个字符串,回答是有了,所以直接把已经存在与常量池中的"helloworld"的地址赋给s4,于是s3和s4这两个变量的地址指向同一个"helloworld";而s5

由于java支持多线程,那么有可能在你执行"String s5=s1+s2"这条语句的时候,有其他的线程修改了s1或者是s2指向的值,所以在编译的时候编译器不能确定s1和s2是否指向原来的值。

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值