在Java中使字符串私有或公共
Java中的字符串被认为是不可变的。 所以如果我说在Java中使字符串私有或公共,java,string,private,immutability,public,Java,String,Private,Immutability,Public,Java中的字符串被认为是不可变的。 所以如果我说 String one = "myString"; 及 在内部,两个对象将使用相同的文本。 现在让我困惑的是,为什么我要在不同的类中使我的字符串私有化,而在内部它们将引用相同的字符串文本 只是外部元素(如类或对象)不知道类中有哪些成员吗?可见性和访问权限实际上只在编译期间存在,以检查您是否能够做到这一点或那一点,在运行时通常可以调用私有方法或通过不同的方法更改不可变数据 另一点:这些字符串是不可变的,因此您无法通过标准方法更改它们的值,因此它们
String one = "myString";
及
在内部,两个对象将使用相同的文本。
现在让我困惑的是,为什么我要在不同的类中使我的字符串私有化,而在内部它们将引用相同的字符串文本
只是外部元素(如类或对象)不知道类中有哪些成员吗?可见性和访问权限实际上只在编译期间存在,以检查您是否能够做到这一点或那一点,在运行时通常可以调用私有方法或通过不同的方法更改不可变数据
另一点:这些字符串是不可变的,因此您无法通过标准方法更改它们的值,因此它们可以在内存中处于相同的位置,并且它与使用它们的类无关。可见性和访问权限实际上仅在编译期间存在,以检查您是否能够这样做,在运行时,您通常可以调用私有方法或通过不同的方法更改不可变数据
另一点:这些字符串是不可变的,因此您无法通过标准方法更改它们的值,因此它们可以在内存中处于相同的位置,并且无论哪个类将它们用于
字符串引用,它实际上不会更改任何内容。这只是一个惯例和封装的问题。如果您的其他字段是私有的,并且有getter和setter,为什么您的字符串不应该字段(除非它是要隐藏的) 对于String
引用,它实际上不会改变任何东西。这只是一个惯例和封装的问题。如果您的其他字段是私有的,并且有getter和setter,为什么您的字符串不应该字段(除非它是要隐藏的) 因为客户端可以将您的内部成员完全设置为其他内容。您可能混淆了字符串
是不可变的,而引用是final
假设你有这样一门课:
public class MyClass {
public String first = "Test";
public String second = "Test";
}
因此,作为Java编译器专家,我们知道内部first
和second
引用相同的对象。酷
现在,当我使用MyClass
时:
MyClass myClass = new MyClass();
myClass.second = "Time to do some hackin'";
那太糟糕了。真的很糟糕
声明String
成员private
与失去编译器效率优势无关。它是关于类封装它的实现,这样它的客户端就不会与它紧密耦合,这样类就不必担心由于客户端不负责任的行为而导致的奇怪行为
对象“Test”是不可变的这一事实并不意味着我不能将第一个
或第二个
更改为指向其他对象
希望这会有所帮助。因为客户端可以将您的内部成员完全设置为其他内容。您可能混淆了字符串
是不可变的,而引用是final
假设你有这样一门课:
public class MyClass {
public String first = "Test";
public String second = "Test";
}
因此,作为Java编译器专家,我们知道内部first
和second
引用相同的对象。酷
现在,当我使用MyClass
时:
MyClass myClass = new MyClass();
myClass.second = "Time to do some hackin'";
那太糟糕了。真的很糟糕
声明String
成员private
与失去编译器效率优势无关。它是关于类封装它的实现,这样它的客户端就不会与它紧密耦合,这样类就不必担心由于客户端不负责任的行为而导致的奇怪行为
对象“Test”是不可变的这一事实并不意味着我不能将第一个
或第二个
更改为指向其他对象
希望有帮助。使用private for String引用阻止外部对象的直接访问。但是setter和getter允许您访问/更改字符串变量(如果设置)。但是在setter方法中,您可以在更改值之前验证参数。这就是使用setter方法的主要优点
然后,假设两个对象中有两个相等的私有字符串变量。然后这两个引用应该指向字符串池中的一个位置。但听起来你们不能从一个对象访问两个字符串(因为你们总是使用受私有修饰符限制的引用变量) 使用private for String引用会阻止外部对象的直接访问。但是setter和getter允许您访问/更改字符串变量(如果设置)。但是在setter方法中,您可以在更改值之前验证参数。这就是使用setter方法的主要优点
然后,假设两个对象中有两个相等的私有字符串变量。然后这两个引用应该指向字符串池中的一个位置。但听起来你们不能从一个对象访问两个字符串(因为你们总是使用受私有修饰符限制的引用变量) 因为它们是不可变的,所以两个不同对象的两个成员是否指向同一个对象并不重要。但是为了防止任何人通过重新分配成员变量来更改对象的内部状态,这就是为什么要将其设置为私有。因为它们是不可变的,所以两个不同对象的两个成员是否指向同一个对象并不重要。但是为了防止任何人通过重新分配成员变量来更改对象的内部状态,这就是为什么将其设置为私有。如果我有publicgetter
和setter
,那么我还可以更改对其他对象的引用,那么私有的重要性是什么。既然它们在内部使用相同的字符串文字,为什么我要将它们设为私有?@Digvijay Yadiv您是开发人员,因此如果不想,您不必实现setter
方法。您只需使用get
方法即可访问它<代码>getter
和setter
在p中是必需的