关于Java 字符串的一个小问题

问题描述

我在代码里面想实现一个将Object对象打印的功能,具体的代码如下:public class JavaJsonDemo { /** * @param args */ public static void main(String[] args) { Object value = null; String str = "value=" + value; System.out.print(str); }} 这单代码是可以正常执行的。 但是,如果将代码改为  /** * @param args */ public static void main(String[] args) { Object value = null; @SuppressWarnings("null") String str = "value=" + value.toString(); System.out.print(str); } 就会报空指针的异常。 我的问题是:java字符串在进行“+”操作的时候,难道不是调用的toString方法吗?如果是,那么第一种场景为什么可以顺利的被转换为null打印?

解决方案

String str = "value=" + value; 在jdk5及以上变为StringBuilder s = new StringBuilder();s.append("value=");s.append(value);str = s.toString();append部分实现 public AbstractStringBuilder append(Object obj) {return append(String.valueOf(obj)); }public AbstractStringBuilder append(String str) {if (str == null) str = "null"; int len = str.length();if (len == 0) return this;int newCount = count + len;if (newCount > value.length) expandCapacity(newCount);str.getChars(0, len, value, count);count = newCount;return this; }可以看到内部if (str == null) str = "null";而Object value = null; String str = "value=" + value.toString(); value是null,则无法调用它的方法toString 因此空指针

时间: 2024-10-30 01:03:55

关于Java 字符串的一个小问题的相关文章

音频-我用java写了一个小游戏,想插入背景音乐但不太会,求指教

问题描述 我用java写了一个小游戏,想插入背景音乐但不太会,求指教 package text; import java.io.*; import javax.sound.sampled.*; public class text { public static void main(String[] args) { // TODO Auto-generated method stub //创建一个实例 AePlayWave apw = new AePlayWave("G:\照片\Sleep Awa

java泛型类的一个小问题?

问题描述 java泛型类的一个小问题? java中带有泛型的class在用到(newextendsimplements作为函数参数等)他们时,如果不设置他们的泛型,而只是用该class的名字来操作,编译器会警告说"xxx is a raw type",xxx是个原生类型,你应该设置一下它的泛型的类型.那有没有什么时候就是会用到raw type的?就是只需要这个class的名字,而不需要去设置他的泛型类型? 解决方案 比如说继承,在继承的过程中,你保留泛型参数: class List&l

JS中Eval解析JSON字符串的一个小问题_javascript技巧

之前写过一篇 关于 JSON 的介绍文章,里面谈到了 JSON 的解析.我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用eval() 函数. JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. JSON的规则很简单:

我自已用java写了一个小系统,但是在输出时TextArea中的文本不能复制是什么问题?

问题描述 我自已用java写了一个小系统,但是在输出时TextArea中的文本不能复制是什么问题? 我自已用java写了一个小系统,但是在输出时TextArea中的文本不能复制是什么问题? 最多只能复制五个字符 一下是部分代码: //声明部分 JTextArea outputText =new JTextArea(); outputText.setLocation(200,350); outputText.setFont(new Font("",1,15)); outputText.s

学习Java中遇到一个小问题,请求解答!

问题描述 TheserializableclassCyberPetAppletdoesnotdeclareastaticfinalserialVersionUIDfieldoftypelong请问这是什么意思呀?程序运行都没有问题,但总是亮着电灯泡,看着都不舒服! 解决方案 解决方案二:需要在类中定义一个这样的静态字段privatestaticfinallongserialVersionUID=8424700649610459072L;这是序列化要求,是因为父类或本类实现了java.io.Ser

【求助】关于Java编程的一个小问题想请教下高手。。。

问题描述 我现在在学习Java,正在写一个输入IP段扫描局域网MAC地址的Application程序.现在想问问各位大侠,就是Java已经编好的关于数据包截获技术的相关方法在哪个类以及包中.我想通过调用该包的相关类中方法实现数据包截获,并通过对截获包的序列号.源地址.目的地址.源端口.目的端口进行分析来实现局域网内的活动主机探测,并统计活动主机数.

请教一个java线程的一个小问题,求程序执行流程,打印结果为1000 b=1000

问题描述 public class Test implements Runnable{int b = 100;public synchronized void m1() throws Exception{b =1000;Thread.sleep(5000);System.out.println("b:"+b);}public synchronized void m2() throws Exception{Thread.sleep(2500);b = 2000;}public void

新人学习java。在继承上遇到的一个小问题

问题描述 新人学习java.在继承上遇到的一个小问题 代码如下: package construter; class Game { Game(int i){ System.out.println("Game"); }; } class BoarderGame extends Game{ BoarderGame(int i){ super(i);//当我把super参数中的i替换成一个int型数字时就会报错?? System.out.println("BoarderGame c

java-JAVA初学者的一个小问题,求大神解答

问题描述 JAVA初学者的一个小问题,求大神解答 执行完System.out.println("lime");这句后为什么没有换行? 新人,望大神勿喷 解决方案 正确的输出结果就是: lime grape 你说的这个正确答案:limegrape 是不是在哪个书面资料上的啊, 如果自己的结果跟书面上的不同的话,自己动手写一下就是了,书上有很多不对的地方 如果不想换行的话就用System.out.print("lime"); 解决方案二: 你这正确答案不应该是 : li