String s1 ; String s2=null ; String s3=”” ; String s4=new String(“”) ; 的区别。

JavaString  s1 ;  String  s2=null ;  String  s3=”” ;  String  s4=new String(“”) ; 的区别。

======================================================================

当声明为String  s1

声明一个字符串对象,分配了一个内存空间,没有进行初始化,没有存入任何对象。

成员变量: 

JAVA为安全原因不允许一个悬挂引用,没有赋值的引用地址一律自动赋值为NULL,以防止访问到任意内存。

局部变量:

局部变量是不会自动初始化的,必须显示地赋初始值。如果没有赋初始值,在用System.out.println(s1);时会报错。 

----------------------------------------------------------------------------------------------------------------------

当声明为String  s2 = null

声明一个字符串对象,分配了一个内存空间,进行初始化,存入了一个空对象,值为空。

NULL代表声明了一个空对象,根本就不是一个字符串。除了===,对空对象做任何操作都不行的,运行时会报异常。

----------------------------------------------------------------------------------------------------------------------

当声明为String  s3 = “” 时

声明一个字符串对象,分配了一个内存空间,初始化,存了一个字符串对象,值为””

是在字符串常量池(栈中)存入了一个字符串常量,并用引用指向他。

当声明为String  s3 = new  String(“” ) 

声明一个字符串对象,分配了一个内存空间,初始化,存了一个字符串对象

是在堆中创建一个字符串对象,并把引用放在栈中指向他的首地址。

评论(0)引用此答案举报 (2011-08-30 14:07)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下代码存在bug,请找出:package Y; import java.io.*; import java.net.*; import java.time.*; import java.util.*; public class Shiyan5Server { public static void main(String[] args) { ServerSocket server = null; Sy5ServerThread thread; Socket you = null; while(true) { try { server = new ServerSocket(2010); } catch (IOException e) { System.out.println("正在监听"); // TODO: handle exception } try { System.out.println("等待客户呼叫"); you = server.accept(); System.out.println("客户的地址"+you.getInetAddress()); } catch (Exception e) { // TODO: handle exception System.out.println("正在等待客户"); } if (you!=null) { new Sy5ServerThread(you).start(); } } } } class Sy5ServerThread extends Thread{ Socket socket; DataOutputStream out = null; DataInputStream in = null; String s = null; Sy5ServerThread(Socket t) { socket = t; try { out = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); // TODO: handle exception } } public void run() { while(true) { try { String S1 = "几点了?"; String S2 = "今天是几号?"; String S3 = "今天是星期几?"; String S4 = "再见"; String st = in.readUTF(); if (st.equals(S1)) { LocalTime time = LocalTime.now(); String Time = String.format("%tR", time); out.writeUTF(Time); } else if(st.equals(S2)) { LocalDate date = LocalDate.now(); String Time = String.format("%tm月%td日", date,date); out.writeUTF(Time); }else if (st.equals(S3)) { LocalDate week = LocalDate.now(); String Time = String.format("%tA", week); out.writeUTF(Time); }else if(st.equals(S4)) { System.out.println("结束服务"); break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
最新发布
05-29

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值