String的几点知识心得

本文详细解析了Java中字符串比较的方法及对象创建的过程,通过具体示例解释了equals方法与==操作符的区别,并探讨了不同类型包装类间的比较及String对象创建的数量。

1.boolean equals(String s)方法比较某字符串是否与字符串s相同。例如:
String str1="abc";

String str2=Abc;
String str3="abc";
String str4=new String("abc");

 

System.out.println(str1.equals(str2));

System.out.println(str1==str2);

      

System.out.println(str1.equals(str3)); System.out.println(str1==str3);

      

System.out.println(str1.equals(str4));

System.out.println(str1==str4);
注意两个字符串比较与两个字符串引用对象比较的区别。
比如,表达式str1.equals(str2)与表达式str1==str2的差异。前者表示所引用的两个字符串的内容是否相同,后者表示str1str2是否引用同一个对象。在以上4行代码中,由于str1str2分别引用不同的对象,所以str1==str2的值是false;因为str1str3引用同一个字符串常量,str1==str3的值是true。尽管str1str4引用的对象的内容相同,因为他们是不同的对象,str1引用的是编译时能确定的字符串常量,str4引用的是程序运行时创建的对象,所以表达式str1==str4的值是false。所以后面的六行代码的输出结果分别是:

false

false

true

true

true

false

2.    根据下列条件,描述正确的是?

Integer i = new Integer (42); Long 1 = new Long (42); Double d = new Double (42.0); A. (i ==1) B. (i == d) C. (d == 1) D. (i.equals (d)) E. (d.equals (i)) F. (i.equals (42))

这是优快云论坛上一个题目,觉得蛮有意思的!答案是F

显然ABC不对哦!论坛上说要查看它们实现的原代码,我查了一下,是这样的:

public boolean equals(Object obj) {

       if (obj instanceof Integer) {

           return value == ((Integer)obj).intValue();

       }

       return false;

}

 

3.还有是关于String的创建的对象和引用的问题

同样是优快云上的题目:

11)下面代码一共创建了几个对象?
1. String s1 = "abc"; 2. String s2 = s1; 3. String s3 = "abc"; A. None B. 1  C. 2   D. 3
12)下面代码一共创建了几个对象?
1. String s1 = "abc"; 2. String s2 = s1; 3. String s3 = new String("abc"); A. None  B. 1  C. 2  D. 3  
13)下面代码一共创建了几个对象?
1. String s1 = "abc"; 2. String s2 = new String(s1); 3. String s3 = new String("abc"); A. None  B. 1   C. 2  D. 3

当然答案显然是  A  B  C

上面说了String s1=”abc”,只是引用编译时的一个变量,并没有创建对象!只有当new语句时,才在内存中为对象分配一块空间!

 

Sting,和数组是Java SE最基础的东西啦,也是考得很多的东西,自认为这块掌握得不是很好!

 

### 学习Java接口(Interface)的心得体会和应用场景 #### 1. 接口的基本概念与特点 Java中的接口是一种抽象类型,它定义了一组方法,但不提供具体的实现[^1]。通过`interface`关键字声明的接口可以包含抽象方法、默认方法、静态方法以及常量字段。接口的主要特点是: - 接口中的所有方法默认是`public`和`abstract`的。 - 接口中定义的变量默认是`public`、`static`和`final`的。 - 一个类可以实现多个接口,从而支持多重继承的功能[^2]。 #### 2. 接口的学习心得 学习Java接口时,需要理解以下几个关键点: - **抽象性**:接口提供了行为规范,而不关注具体实现细节。这种设计使得接口成为定义通用行为的理想工具[^1]。 - **多态性**:通过接口,可以实现不同类之间的多态行为。例如,多个类可以实现同一个接口,并以不同的方式实现其方法[^2]。 - **解耦合**:接口帮助实现代码的低耦合设计。调用者只需要依赖接口,而不需要关心具体的实现类[^1]。 #### 3. 接口的应用场景 以下是接口在实际开发中的一些典型应用场景: ##### (1)定义通用行为 接口可以用来定义一组通用的行为规范,适用于多种类型的对象。例如,在处理动物行为时,可以定义一个`Animal`接口,其中包含`eat()`和`move()`等方法。不同的动物类可以通过实现该接口来提供各自的具体行为。 ```java public interface Animal { void eat(); void move(String destination); } public class Dog implements Animal { @Override public void eat() { System.out.println("Dog is eating"); } @Override public void move(String destination) { System.out.println("Dog is moving to " + destination); } } ``` ##### (2)支持回调机制 接口可以用于实现回调功能。例如,在事件驱动编程中,可以通过接口定义事件处理程序的行为。当某个事件发生时,调用接口中的方法来执行相应的操作[^1]。 ```java public interface OnClickListener { void onClick(); } public class Button { private OnClickListener listener; public void setOnClickListener(OnClickListener listener) { this.listener = listener; } public void click() { if (listener != null) { listener.onClick(); } } } // 使用示例 Button button = new Button(); button.setOnClickListener(new OnClickListener() { @Override public void onClick() { System.out.println("Button clicked!"); } }); button.click(); ``` ##### (3)模块化设计 接口可以帮助实现模块化的系统设计。例如,在开发一个支付系统时,可以定义一个`PaymentService`接口,然后为不同的支付方式(如信用卡、PayPal等)创建具体的实现类[^1]。 ```java public interface PaymentService { boolean processPayment(double amount); } public class CreditCardPayment implements PaymentService { @Override public boolean processPayment(double amount) { System.out.println("Processing credit card payment for $" + amount); return true; } } ``` ##### (4)扩展功能 通过接口的默认方法,可以在不修改已有实现类的情况下为接口添加新功能。这有助于保持代码的向后兼容性[^1]。 ```java public interface MyInterface { default void newMethod() { System.out.println("This is a new method added to the interface"); } } ``` #### 4. 接口与其他概念的比较 - **接口与抽象类**:抽象类可以包含部分实现,而接口完全抽象。从Java 8开始,接口可以通过默认方法提供部分实现,但仍不能包含状态(即实例变量)。抽象类则可以包含状态和构造方法[^2]。 - **接口与普通类**:普通类提供了完整的实现,而接口只定义了行为规范。普通类只能单继承,而接口支持多继承[^1]。 --- ### 示例代码综合应用 以下是一个结合接口、抽象类和多态性的综合示例: ```java // 定义接口 public interface Flyable { void fly(); } // 抽象类 public abstract class Bird { public abstract void makeSound(); } // 实现类 public class Sparrow extends Bird implements Flyable { @Override public void makeSound() { System.out.println("Sparrow chirps"); } @Override public void fly() { System.out.println("Sparrow flies"); } } // 测试类 public class Test { public static void main(String[] args) { Bird sparrow = new Sparrow(); sparrow.makeSound(); if (sparrow instanceof Flyable) { ((Flyable) sparrow).fly(); } } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值